関数内にある可能性のあるすべてのケースをチェックしてもMyPyエラー "Missing return statement"MyPyはすべてのケースがテストされていても "Return statementがありません"というエラーを表示します
たとえば、次のコードでは、MyPyはまだcolor
のみColor.RED
、Color.GREEN
、またはColor.BLUE
ことができたとしても、私にエラー"9: error: Missing return statement"
を与えている、と私はすべてのこれらのケースをテスト!
class Color(enum.IntEnum):
RED: int = 1
GREEN: int = 2
BLUE: int = 3
def test_enum(color: Color) -> str:
if color == Color.RED:
return "red"
elif color == Color.GREEN:
return "green"
elif color == Color.BLUE:
return "blue"
「カラー」が3つのケースのいずれにも等しくない場合は、ケースを処理しませんでした。例えば、 'color'は' 'あなたが私を逃したhahaha ''と同じです。 – Sraw
何も返さないコードにはパスがあります(つまり、 'color'がチェックしている色でない場合)。最後の 'elif'を無条件' else'に変更するか、エラーをスローする、またはエラーコードを返す新しい 'else'を追加することができます。 –
あなたの直感は正しいです。 Swiftのような言語では、Swiftコンパイラが列挙型の可能なオプションを解釈するため、これは完全に有効です。私の推測では、MyPyは(まだ)それをしていないし、単純に文字列値を列挙型コンテキストを完全に認識しない文字列値と比較しているということです。 –