控制流问题:Python 函数已调用但未执行

Control Flow issue: Python function called but not executed

我遇到了我一生中遇到的最奇怪的问题。

我的部分代码如下所示:


class AzureDevOpsServiceError(Exception):
    pass


skip = ["auto"]


def retrieve_results():
    print(variable_not_defined)
    ... # some useful implementation


if not "results" in skip:
    try:
        print("before")
        retrieve_results()
        print("after")
    except AzureDevOpsServiceError as e:
        print(f"Error raised: {e}")

显然,这会引发错误,因为 variable_not_defined 没有定义。

然而,由于一些奇怪的原因,代码正确执行并打印

before
after

我试过用参数调用函数(retrieve_results(1234))或在函数中添加参数(def retrieve_results(arg1)retrieve_results()):这两种修改都会触发异常,很明显这个函数被调用了。

有人遇到过类似的问题并且知道会发生什么吗?

仅供参考:这实际上是我的实现方式:

from azure.devops.exceptions import AzureDevOpsServiceError
import logging


def _retrieve_manual_results(connect: Connectivity, data: DataForPickle) -> None:
    """Retrieve the list of Test Results"""
    print("G" + ggggggggggggggggggggggggggggggggggggg)
    logger = connect.logger

    data.run_in_progress = [165644]

if __name__ == "__main__":
    p = ...
    connect = ...
    data = ...

    if not "results" in p.options.skip:
        try:
            print("........B.........")
            _retrieve_manual_results(connect, data)
            print("........A.........")
        except AzureDevOpsServiceError as e:
            logging.error(f"E004: Error while retrieving Test Results: {e}")
            logging.debug("More details below...", exc_info=True)

正如@gmds 强调的那样,这是缓存的问题。

删除 .pyc 文件并没有多大作用。

不过,我找到了解决办法:

  1. 重命名函数(例如添加 _
  2. 运行 程序
  3. 重命名(即删除前面示例中的 _

现在,问题已经解决了。

如果有人知道幕后发生的事情,我非常感兴趣。