try:
#some stuff
except Exception:
pass
pylint '는 "예외"캐치'W0703 경고가 발생합니다. 왜?
try:
#some stuff
except Exception:
pass
pylint '는 "예외"캐치'W0703 경고가 발생합니다. 왜?
일반적으로 루트 Exception 객체를 catch하지 않고 대신 특정 예외를 catch하는 것이 좋습니다 (예 : IOException).
메모리 부족 예외가 발생했는지 고려하십시오. 단순히 "통과"를 사용하면 프로그램을 양호한 상태로 유지할 수 없습니다.
예외를 잡아야 할 때가 거의 있습니다. 예외는 프로그램의 최상위 레벨에 있습니다. 오류를 표시하고 오류를 표시하고 정상적으로 종료 할 수 있습니다.
너무 많이 붙잡고 있다고 생각하기 때문에. 맞습니다.
예외가 발생하면 예외가 발생합니다. 일반적으로 프로그램이 종료되는 것이 좋습니다.
일부 예외는 무시하고 싶지만 IMO에서는 이와 같은 기본 클래스를 잡을만한 이유가 없습니다.
안녕하세요. 나는 '좋은 이유가 없다'는 것에 동의하지 않는다고 생각합니다. 예를 들어, 까다로운 데이터 세트에서 특정 작업을 시도 할 때 예외를 발생시키는 GUI 프로그램을 상상해 볼 수 있습니다. 예기치 않은 예외가 스택 트레이스 (초기에 실패 함)로 프로그램을 끝내야한다고 말하는 프로그래머로서 모두 훌륭하지만 실제로는 사용자가 원하는 것은 현재 작업이 메시지 상자 나 로그 파일 메시지로 정상적으로 실패하는 것입니다. , GUI가 계속해서 작동 할 수 있도록합니다. 나쁜 일이 일어나기 전에 데이터를 저장하십시오. –
전적으로 동의합니다. OP가 '통과'로 예외를 무시하는 방식을 언급했습니다. 나는 내 주장을 분명히해야했다. –
충분히 공평 해주십시오. –
잡기 예외 (다시 제기하지 않음)에는 2 가지의 나쁜 부작용이 있습니다. 즉, 오류가 발생하여 스택 추적을 잃지 만 ctrl-c (또는 운영 체제의 중단 키가 무엇이든지)도 가져옵니다. 여기에서 처리했습니다.
이러한 일반적인 프로그램 동작은 중지 할 수 없거나 ctrl-c를 사용하여 제어 흐름을 예외 처리기로 건너 뛰고 계속 진행하는 것입니다. 그런 다음 코드를 중단하거나 ctrl-c를 눌러 해지해야합니다.
이것은 더 이상 파이썬 2.6에서 사실이 아니며 KeyboardInterrupt는 더 이상 예외를 상속하지 않습니다. –
스택 추적을 잃지 않습니다. sys.exc_info()가있는 'traceback'모듈을 사용하십시오. – PeqNP
아주 좁은 범위의 유형 만 잡는 것이 좋습니다. 'Exception'은 너무 일반적입니다. 여러분이 계획 한 오류뿐만 아니라 다른 오류도 잡아낼 수 있습니다. 코드에서 잡히지 않은 경우 진단하는 것이 더 빠를 수있는 버그를 숨길 수 있습니다. 매우 높은 수준의 단일 예외 처리기로 처리하는 것이 더 좋습니다.
파이썬 2.6 이후로, 잡기를 원치 않는 모든 예외 (SystemExit, KeyboardInterrupt)가 Exception에서 더 이상 상속받지 않기 때문에 Exception을 잡는 것이 훨씬 더 합리적이되었습니다. 대신 대신 공통 BaseException을 상속합니다. 이것은 흔히 볼 수있는 관용어이기 때문에 잡을 예외를 상대적으로 무해하게 만들기 위해 의도적으로 수행되었습니다.
& 향후 계획은 PEP 3110을 참조하십시오.
그렉의 대답과 같이 'Exception'은 기본 클래스이며 예외는이 클래스에서 파생되어야합니다 (exceptions.Exception 참조). 여기
pydocs 또한
참고 예외가 발생한 위치를 알 수있는 매우 편리한 역 추적 모듈의 오류의 매우 유용한 목록입니다. 'except : ...'만 사용하면 자신의 케이스에서 가장 잘 사용해야하는 오류가 표시됩니다. 예를 들어,이 코드를 사용해보십시오 (코멘트를 토글하십시오). 아마도 이것을 받아 들일 것입니다 :
이 나쁜 버릇은 상당한 디버깅 악몽을 생성 할 것입니다.특히 당신이 생각한 것 이외의 예외가 try/except 내부에서 발생했을 때. 그리고 이것은 단순히 발생합니다 ... – vaab