메소드 내에서 assert를 사용하는 것은 나쁜 습관입니까?메소드 내에서 assert 사용하기 - 파이썬
def add(x, y):
assert isinstance(x, int) and isinstance(y, int)
return x + y
어떤 아이디어가?
메소드 내에서 assert를 사용하는 것은 나쁜 습관입니까?메소드 내에서 assert 사용하기 - 파이썬
def add(x, y):
assert isinstance(x, int) and isinstance(y, int)
return x + y
어떤 아이디어가?
전혀 아님.
예제에서 add
이 정수를 예상한다고 가정하면 메서드 시작 부분에이 제약 조건이 실제로 적용됩니다.
그냥 당신이 가지고있는 다른 선택을 상상하고 얼마나 나쁜 사람들은 다음과 같습니다
add
의 구현을보고 강제로 무슨 일이 일어나는지 알 수 있습니다.int
으로 변환하려고 시도합니다. 사용자가 왜 add(2.4,3.1)
이 5
을 계속 반환하는지 궁금해합니다.당신의 코드가 당신의 실제 코드보다 더 많은 주장문을 포함하고 있다면 나는 화를 낼 것입니다.
어설 션을 사용하고 어설 션 예외를 발생시키는 대신 instance()를 사용하여 적절한 검사를 수행하고 적절한 TypeError를 발생 시키십시오.
이와 같은 경우 대신 예외를 발생시키지 않으시겠습니까? 코드를 디버깅 할 때만 어설 션을 사용하는 것을 선호합니다. –
그것은 확실히 계기에 달려 있지만 (특히 동적 유형의 언어) 예외는 런타임 오류에 대한 것이며 어설 션은 프로그래밍 오류를 잡는 데 사용됩니다. 'add '를위한 문서가'int '만을 받아 들인다는 것을 명확히 진술한다면 호출자는이 제약 조건을 지키지 않으면되고 계약 위반은 프로그래밍 오류이다. –
(게다가, 파이썬에서'assert'는'AssertionError'를 발생시킵니다 - 그래서 실제로 예외를 발생시키는 합성 설탕입니다.) –