2009-09-29 52 views
7

我一直在列出需要用新內容更新的頁面列表(我們正在切換媒體格式)。在這個過程中,我正在對正確包含新內容的頁面進行編目。Python正則表達式「對象沒有任何屬性」

下面是我在做什麼的總體思路:

  1. 迭代通過的文件結構,並得到使用正則表達式搜索文件
  2. 對於讀取到緩衝區中的每個文件,列表,匹配特定標籤
  3. 如果匹配,測試2更正則表達式匹配
  4. 寫所得匹配(一個或另一個)到數據庫

一切工作正常,直到3日正則表達式匹配,在那裏我得到如下:

'NoneType' object has no attribute 'group'

# only interested in embeded content 
pattern = "(<embed .*?</embed>)" 

# matches content pointing to our old root 
pattern2 = 'data="(http://.*?/media/.*?")' 

# matches content pointing to our new root 
pattern3 = 'data="(http://.*?/content/.*?")' 

matches = re.findall(pattern, filebuffer) 
for match in matches: 
    if len(match) > 0: 

    urla = re.search(pattern2, match) 
    if urla.group(1) is not None: 
     print filename, urla.group(1) 

    urlb = re.search(pattern3, match) 
    if urlb.group(1) is not None: 
     print filename, urlb.group(1) 

謝謝。

回答

16

您的異常意味着urla的值爲None。由於urla的值由re.search調用決定,因此re.search返回None。當字符串與模式不匹配時會發生這種情況。

所以基本上你應該使用:

urla = re.search(pattern2, match) 
if urla is not None: 
    print filename, urla.group(1) 

,而不是你現在所擁有的。

2

TypeError的原因是searchmatch通常會返回MatchObjectNone。其中只有一個有group方法。這不是None。所以您需要做:

url = re.search(pattern2, match) 
if url is not None: 
    print(filename, url.group(0)) 

P.S.PEP-8建議使用4個空格進行縮進。這不僅僅是一個意見,這是一個很好的做法。你的代碼很難閱讀。

+0

啊。謝謝。我在代碼中使用了選項卡,該代碼由本網站的格式引擎重新格式化/重新解釋。 「url不是無固定它」 – ives 2009-09-29 17:10:04

0

另請注意,您錯誤地假設錯誤發生在第三次匹配中,而事實上這是第二次。這似乎導致了錯誤的假設,即第二場比賽正在做一些事情來使第三場比賽失效,從而讓你偏離軌道。

2

我得到了同樣的問題。

使用python2.6的,你可以用這種方式解決它:

 
for match in matches: 
if len(match) > 0: 

    urla = re.search(pattern2, match) 
    try: 
    urla.group(1): 
    print filename, urla.group(1) 
    excpet: 
    print "Problem with",pattern2 


    urlb = re.search(pattern3, match) 
    try: 
    urlb.group(1) 
    print filename, urlb.group(1) 
    except: 
    print "Problem with",pattern3 
+0

小錯字:除了:而不是「excpet:」for urla block。 – 2014-02-24 09:47:38

相關問題