source

Python에서 변수가 None, True 또는 False일 경우 어떻게 테스트해야 합니까?

factcode 2022. 9. 14. 22:12
반응형

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"

정말 간단한가요?== Truetri-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 :확실히 하고 싶기 때문에 충분하지 않다exprTrue와 다를 뿐만 아니라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

반응형