Python BaseException에서 상속하지 마십시오. 이유는 다음과 같습니다.

2283 단어 python
저는 이번 주에 작성자가 예외가 아닌 BaseException을 상속받는 PR을 만났습니다. 나는 그것이 가질 수 있는 의도하지 않은 부작용을 설명하기 위해 이 예를 만들었습니다.
.py 파일에서 이 예제를 직접 실행하고 control-c로 종료해 보십시오.

Keybard 인터럽트를 할 수 없습니다


KeyboardInterrupt 등은 BaseException 를 상속받은 예외로 생성되기 때문에 BaseException 를 제외하면 더 이상KeyboardInterrupt .

from time import sleep

while True:
    try:
        sleep(30)
    except BaseException: # ❌
        pass


Exception 이상 제외



예외에서 제외하거나 예외에서 상속하는 것보다 나은 경우 의도하지 않은 부작용을 피하는 것이 좋습니다.

from time import sleep

while True:
    try:
        sleep(30)
    except Exception: # ✅
        pass


이것은 사용자 지정 예외에도 적용됩니다.



사용자 정의 예외를 만들 때 사용자 또는 팀 구성원이 예외를 포착하고 가능하면 처리하려고 할 것입니다. 에서 상속하는 경우BaseException 그들이 당신의
커스텀 예외.

class MyFancyException(BaseException): # ❌
    ...

class MyFancyException(Exception): # ✅
    ...

좋은 웹페이지 즐겨찾기