两个函数不在同一个脚本中工作,但是单独工作

时间:2014-01-27 17:19:00

标签: python function xml-parsing lxml

我正在编写一个用于解析此类html文档的脚本:

<html>
  <head></head>
  <body>
     <p>
       <dfn>text</dfn>sometext<i>othertext</i></p>
     <p> .....................................</p>
     <p> .....................................</p>
  </body>
</html>

我尝试过不同的xml-parsing包,并在lxml上停止。 我需要首先使用正则表达式迭代dfn标记的内容,然后迭代i标记的内容。所以,我为每个任务编写了我的2个函数。它们分开工作,但不能在同一个脚本中一起工作。他们在这里:

tree = etree.parse(html-file)

def f1():
   for x in tree.getiterator('dfn'):
       bu = x.text
       if re.findall(r'\s[A-Z]{1,2}$', bu):                  
           print(bu)

def f2():
    for x in tree.getiterator('i'):
       mu = x.text
       if re.findall(r'\W\s[A-Z]$', mu):
           print(mu)


def main():
    f1()
    f2()

if __name__ == "__main__":
    main() 

当我运行脚本时,我得到 f1 的正确输出,然后是以下错误消息:

Traceback (most recent call last):
  File "/home/elaine/Desktop/try2.py", line 47, in <module>
    main()
  File "/home/elaine/Desktop/try2.py", line 33, in main
    f1()
  File "/home/elaine/Desktop/try2.py", line 20, in f1
    if re.findall(r'\s[A-Z]{1,2}$', bu):                  
  File "/usr/lib/python2.7/re.py", line 177, in findall
    return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer

2 个答案:

答案 0 :(得分:1)

您是否需要测试x.text是否不是None

答案 1 :(得分:1)

仔细查看堆栈跟踪,特别是这一行:

File "/home/elaine/Desktop/try2.py", line 20, ***in f1***

这告诉您正在f1函数中发生错误。如果您将对f2的调用注释掉,您应该会发现仍然会遇到相同的错误。它看起来像f1正确完成,因为它为您提供了正确的输出,但最终必然会遇到导致它断开的事情。

我建议将print(bu)放在第bu = x.text行之后,以查看导致正则表达式中断的值bubu可能是None,但它也可能带有其他价值。

如果您需要更多帮助,我建议您发布您要解析的html文件。