正在查找导致异常的执行路径



我的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 dialog的保护,所以这不会成为问题。

它不是IDE中的错误,因为它正在做它应该做的事情。如果它真的让你感到困扰,并且你无法以其他方式静音警告,你可以不必要地在第一个if dialog的顶部定义check_dialog = None之类的东西,它就会关闭。然而,它也不是您的程序/代码的错误,如上所述,这不会导致UnboundLocalError。这是可以安全忽略的,而且由于IDE的工作方式,错误报告可能会被关闭。

相关内容

  • 没有找到相关文章

最新更新