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

プログラマーとして、これを推論し、認識したコード パスが保護されていることを確認できます。elseケースはキャッチされない aを発生させ、使用法は両方のケースでValueError保護される(el)if dialogため、これは問題になりません。

これは IDE のバグではありません。本来の動作をしているからです。それが本当に気になり、他の方法で警告を黙らせることができない場合check_dialog = Noneは、最初の の上に不必要に のようなものを定義するif dialogと、シャットダウンします。ただし、これはプログラム/コードのバグではなく、上記の理由でUnboundLocalError. これは無視しても問題ありません。また、IDE の動作が原因で、バグ レポートが閉じられる可能性があります。

于 2015-03-19T15:08:10.727 に答える