代码之家  ›  专栏  ›  技术社区  ›  David J.

为什么这个Python脚本会冻结?

  •  0
  • David J.  · 技术社区  · 6 年前

    我有一个函数,它在一些文本上尝试正则表达式列表,看看是否匹配。

    @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更有效)

    TimeoutError,借用自 this question ,被触发,但不会导致脚本继续运行。它只写下“计时器过期”并保持冻结状态。

    0 回复  |  直到 6 年前