为什么此Python脚本冻结?

时间:2018-07-24 08:47:24

标签: python regex exception runtime-error

我有一个函数,可以在某些文本上尝试一个正则表达式列表,以查看是否存在匹配项。

@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”并保持冻结状态。

0 个答案:

没有答案