2009-09-29 75 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

相关问题