2017-11-07 30 views
1

함수 내에서 가능한 모든 경우를 확인해도 MyPy 오류 "누락 된 return 문"이 표시됩니다.MyPy는 모든 사례가 테스트 된 경우에도 "누락 된 return 문"오류를 표시합니다.

예를 들어, 다음 코드에서 MyPy은 여전히 ​​비록 colorColor.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" 
+0

'색상'이 3 가지 경우 중 어느 것과도 동일하지 않은 경우 사례를 처리하지 않았습니다. 예를 들어'color'는''hahaha you missing me "'와 같습니다. – Sraw

+0

아무 것도 반환하지 않는 코드가 있습니다 (예 :'color'가 확인중인 색상이 아닌 경우). 마지막 엘프를 무조건'else'로 변경하거나 에러를 던지거나 에러 코드를 반환하는'else'를 새로 추가 할 수 있습니다. –

+1

직감이 정확합니다. Swift와 같은 언어에서는 Swift 컴파일러가 열거 형에서 가능한 옵션을 해석하기 때문에 이것이 완벽하게 유효합니다. 내 생각 엔 MyPy가 (아직) 그렇게하지 않고 단순히 문자열 값을 열거 형 문맥을 완전히 인식하지 못하는 문자열 값과 비교한다는 것입니다. –

답변

2

정말로이 질문에 대한 질문은 없습니다. 실제로 mypy는 실제로이 방식으로 작동합니다. 열거 형 지원은 구워지고 예비적이고 다소 특별합니다. 당신이 찾고있는 검사의 종류가 앞으로 구현 될지도 모릅니다.

그러나이 코드는 허약합니다. 색상이 변경되면 자동으로 중단됩니다. 파이썬은 컴파일 된 언어가 아니라는 점을 기억하십시오 - 유형 검사기 통과는 선택적이며 다른 사람이 사용하지 않을 수도 있습니다.

올바른 방법 IMO는 끝에 assert False을 추가하는 것입니다. 이것은 또한 mypy를 침묵시킬 것이다.