1

我的 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()
4

1 回答 1

1

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

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

这不是您的 IDE 中的错误,因为它正在做它应该做的事情。如果它真的困扰你并且你不能以其他方式使警告静音,你可以不必要地check_dialog = None在 first 的顶部定义一些东西if dialog,它会关闭。但是,这也不是您的程序/代码的错误,如上所述,它不会导致UnboundLocalError. 忽略这一点是安全的,并且由于您的 IDE 可能是如何工作的,因此错误报告将被关闭。

于 2015-03-19T15:08:10.727 回答