Python에서 변수가 None, True 또는 False일 경우 어떻게 테스트해야 합니까?
다음 세 가지 중 하나를 반환할 수 있는 기능이 있습니다.
- 성공(
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
에러에 대해서 외부 프로그램이 로그 해 속행하는 것에 의해서, 예외를 발생시키는 기능.
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
또한 구문 분석 오류에 대한 예외를 발생시킬 수 있습니다.이 경우 여기서 오류를 포착하거나 레벨 업으로 전파하면 인쇄 비트가 한 줄의 if-sign 스테이트먼트로 감소합니다.
예외를 두려워하지 마세요!프로그램을 로그로 기록하고 속행하는 것은 다음과 같이 간단합니다.
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 something == True:
말도 안 돼요. if-statement에 중복된 조건 규칙을 반복하는 건 말도 안 돼요.
더 나쁜 건, 여전히, 절대, 절대, 절대, 절대 말하지 마
if something == False:
당신은 가지고 있다not
자유롭게 사용하세요.
마지막으로 하는 것a == None
비효율적입니다.하다a is None
.None
특별한 싱글톤 오브젝트입니다.하나밖에 없어요.그 물건이 있는지 확인해 보세요.
좋은 답변들이 많이 있습니다.한 가지 더 추가하겠습니다.수치를 사용하고 있는 경우, 코드에 버그가 들어갈 가능성이 있습니다.답변은 0입니다.
a = 0
b = 10
c = None
### Common approach that can cause a problem
if not a:
print(f"Answer is not found. Answer is {str(a)}.")
else:
print(f"Answer is: {str(a)}.")
if not b:
print(f"Answer is not found. Answer is {str(b)}.")
else:
print(f"Answer is: {str(b)}")
if not c:
print(f"Answer is not found. Answer is {str(c)}.")
else:
print(f"Answer is: {str(c)}.")
Answer is not found. Answer is 0.
Answer is: 10.
Answer is not found. Answer is None.
### Safer approach
if a is None:
print(f"Answer is not found. Answer is {str(a)}.")
else:
print(f"Answer is: {str(a)}.")
if b is None:
print(f"Answer is not found. Answer is {str(b)}.")
else:
print(f"Answer is: {str(b)}.")
if c is None:
print(f"Answer is not found. Answer is {str(c)}.")
else:
print(f"Answer is: {str(c)}.")
Answer is: 0.
Answer is: 10.
Answer is not found. Answer is None.
제가 강조하고 싶은 것은, 설령 어떤 상황이든if expr :
확실히 하고 싶기 때문에 충분하지 않다expr
이True
와 다를 뿐만 아니라0
/None
/어쨌든is
에서 우선되어야 한다.==
같은 이유로 S.회피하는 것에 대해 많은 언급이 있었다.
그것은 확실히 조금 더 효율적이며, 케익에 있는 체리, 사람이 더 잘 읽을 수 있다.
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]
언급URL : https://stackoverflow.com/questions/2020598/in-python-how-should-i-test-if-a-variable-is-none-true-or-false
'source' 카테고리의 다른 글
스프링 크론 vs 일반 크론? (0) | 2022.09.14 |
---|---|
Flask, SQL Chemy 및 MySQL Server가 없어졌습니다. (0) | 2022.09.14 |
왜 우리는 불변의 계급이 필요한가? (0) | 2022.09.13 |
JavaScript/jQuery DOM 변경 청취자가 있습니까? (0) | 2022.09.13 |
itertools.groupby()를 사용하는 방법 (0) | 2022.09.13 |