我有一个函数,可以在某些文本上尝试一个正则表达式列表,以查看是否存在匹配项。
@timeout(1)
def get_description(data, old):
description = None
if old:
for rx in rxs:
try:
matched = re.search(rx, data, re.S|re.M)
if matched is not None:
try:
description = matched.groups(1)
if description:
return description
else:
continue
except TimeoutError as why:
print(why)
continue
else:
continue
except Exception as why:
print(why)
pass
我循环使用此功能,并运行一堆文本文件。在一个文件中,执行不断停止:
Traceback (most recent call last):
File "extract.py", line 223, in <module>
scrape()
File "extract.py", line 40, in scrape
metadata = get_metadata(f)
File "extract.py", line 186, in get_metadata
description = get_description(text, True)
File "extract.py", line 64, in get_description
matched = re.search(rx, data, re.S|re.M)
File "C:\Users\Joseph\AppData\Local\Programs\Python\Python36\lib\re.py", line 182, in search
return _compile(pattern, flags).search(string)
KeyboardInterrupt
它只是挂在评估matched = re.search(rx, data, re.S|re.M)
上。对于许多其他文件,如果找不到匹配项,则继续进行下一个正则表达式。使用此文件,它不执行任何操作,也不引发任何异常。任何想法可能是什么原因造成的?
编辑: 我现在正在尝试检测超时错误(对我来说,这比更改rx的效率更高)
从this question借用的TimeoutError已触发,但不会导致脚本继续运行。它只是写“ Timer expired”并保持冻结状态。