python - 查找导致异常的执行路径

标签 python unassigned-variable

我的 IDE 警告我分配前可能存在变量引用。但我很难发现它。我已准备好提交错误报告,但也许您可以看到我没有看到的内容。

有问题的变量是一个命名的check_dialog,并且赋值前的引用警告出现在我为您标记的行中的以下代码片段的末尾:

    if dialog:
        validate = None
        string = False

        if dialog == Prompt.YES | Prompt.NO:
            check_dialog = lambda c: chr(c) in 'yn'
        elif dialog == Prompt.CONTINUE | Prompt.QUIT:
            check_dialog = lambda c: chr(c) in 'cq'
        elif dialog == Prompt.YES | Prompt.NO | Prompt.QUIT:
            check_dialog = lambda c: chr(c) in 'ynq'
        else:
            raise ValueError('Invalid dialog argument.')

    answer = None
    while not answer:
        self.addstr(0, 1, prompt)

        if string:
            curses.curs_set(True)
            curses.echo()
            answer = self.getstr(1, 3)
            curses.noecho()
            curses.curs_set(False)
        elif dialog:
            while not check_dialog(answer):  # warning here!
                answer = self.getch()
        else:
            answer = self.getch()

最佳答案

您的 IDE 不会“思考”变量的每个可能值(在大多数情况下,这是不可能的),而是使用启发式方法来防止常见错误。在本例中,它注意到 check_dialog 是在 if 条件内定义的,但并非在所有情况下都定义。然而它是在这种条件下使用的。这可能是一个UnboundLocalError!

作为程序员,我们可以推断出这一点,并看到它注意到的代码路径受到保护。 else 情况会引发一个不会被捕获的 ValueError,并且在这两种情况下,用法都受到 (el)if 对话框 的保护,所以这不会有问题。

这不是 IDE 中的错误,因为它正在执行它应该执行的操作。如果它确实困扰您并且您无法以其他方式消除警告,则可以在第一个 if 对话框 的顶部不必要地定义诸如 check_dialog = None 之类的内容,并且它会住口。但是,这也不是您的程序/代码的错误,如上所述,这不会导致 UnboundLocalError。忽略这一点是安全的,并且由于您的 IDE 可能的工作方式,错误报告将被关闭。

关于python - 查找导致异常的执行路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29147870/

相关文章:

python - 与 CLI 命令对应的 SNMP oid

python - 使用 python 生成 pdf 文件

python - Flask 提供文件后删除文件

python - 关于使用 urllib3 替换 urllib2

c# - 错误 : use of unassigned local variable (for string array)

c# - 如何摆脱编译器错误: C# use of unassigned local variable?

python - 如何返回一个由Python中另一个列表中提取的元素组成的列表?

c# - 编译器错误说我没有分配局部变量并且名称在当前上下文中不存在,而它确实存在?

c# - 使用未分配的局部变量 - 但我知道当程序到达它时,它将被分配