세 가지 중 하나를 반환 할 수있는 기능이 있습니다.
- 성공 (
True
) - 실패 (
False
) - 스트림 읽기 / 파싱 오류 (
None
)
내 질문은 True
또는 False
에 대해 테스트하지 않으면 결과가 무엇인지 어떻게 확인 해야하는지입니다. 아래는 내가 현재하고있는 방법입니다.
result = simulate(open("myfile"))
if result == None:
print "error parsing stream"
elif result == True: # shouldn't do this
print "result pass"
else:
print "result fail"
실제로 == True
부품 을 제거하는 것보다 간단 합니까 아니면 tri-bool 데이터 유형을 추가해야합니다. simulate
외부 프로그램이 오류로 처리하기를 원하면 로그를 기록하고 계속 하기 때문에 함수가 예외를 던지는 것을 원하지 않습니다 .
답변
예외를 두려워하지 마십시오! 프로그램을 로그하고 계속 진행하는 것은 다음과 같이 쉽습니다.
try:
result = simulate(open("myfile"))
except SimulationException as sim_exc:
print "error parsing stream", sim_exc
else:
if result:
print "result pass"
else:
print "result fail"
# execution continues from here, regardless of exception or not
이제 오류 / 오류 없음이 충분히 유익하지 않은 경우를 대비하여 시뮬레이션 방법에서 정확히 무엇이 잘못되었는지에 대해 훨씬 더 풍부한 유형의 알림을받을 수 있습니다.
답변
if result is None:
print "error parsing stream"
elif result:
print "result pass"
else:
print "result fail"
간단하고 명시 적으로 유지하십시오. 물론 사전을 사전 정의 할 수 있습니다.
messages = {None: 'error', True: 'pass', False: 'fail'}
print messages[result]
simulate
더 많은 리턴 코드를 포함하도록 함수를 수정하려는 경우이 코드를 유지 보수하는 것이 약간 문제가 될 수 있습니다.
는 simulate
또한, 구문 분석 오류에 예외를 발생시킬 수있는 경우에 당신도 여기를 잡거나 수준을 전파 할 수 및 인쇄 비트가 한 줄 경우-else 문으로 감소 될 것입니다 것입니다.
답변
절대, 절대, 절대 말하지 마
if something == True:
못. if 문에 대한 중복 조건 규칙으로 중복 지정된 것을 반복해서 반복하기 때문에 미친 짓입니다.
더 이상, 여전히, 절대, 절대, 절대 말하지 마십시오
if something == False:
당신은 있습니다 not
. 자유롭게 사용하십시오.
마지막으로, a == None
비효율적입니다. 마십시오 a is None
. None
특별한 싱글 톤 객체입니다. 단 하나만있을 수 있습니다. 해당 객체가 있는지 확인하십시오.
답변
나는 상황이 있어도, 그것을 강조하고 싶은 if expr :
사람이 있는지 확인하고 싶어하기 때문에 충분하지 않습니다 expr
이다 True
와에서 단 한 차이가 0
/ None
무엇이든, / is
에서 선호 될 ==
S. 로트는 피하는 했나요 같은 이유는== None
.
그것은 실제로 약간 더 효율적이며, 케이크 위에 체리가 있고, 더 인간이 읽을 수 있습니다.
In [1]: %timeit (1 == 1) == True
38.1 ns ± 0.116 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [2]: %timeit (1 == 1) is True
33.7 ns ± 0.141 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
답변
예외를 던지는 것이 귀하의 상황에 더 좋은 아이디어라고 생각합니다. 대안은 튜플을 반환하는 시뮬레이션 방법입니다. 첫 번째 항목은 상태이고 두 번째 항목은 결과입니다.
result = simulate(open("myfile"))
if not result[0]:
print "error parsing stream"
else:
ret= result[1]