문제

다음과 같은 블록의 경우 :

try:
    #some stuff
except Exception:
    pass

Pylint는 W0703 'Catch "Exception"'경고를 높입니다. 왜요?

도움이 되었습니까?

해결책

일반적으로 루트 예외 객체를 포착하는 것이 아니라 더 구체적인 개체 (예 : ioException)를 포착하는 것이 좋은 관행으로 간주됩니다.

메모리 밖의 예외가 발생했는지 고려하십시오. 단순히 "Pass"를 사용하는 것은 프로그램을 좋은 상태로 두지 않을 것입니다.

예외를 포착 해야하는 유일한 시간은 프로그램의 최상위 레벨에 있으며,이를 시도하고 오류를 표시하고 최대한 우아하게 종료 할 수 있습니다.

다른 팁

매우 좁은 범위의 유형 만 잡는 것이 좋습니다. '예외'는 너무 일반적입니다 - 당신은 당신이 계획 한 오류뿐만 아니라 다른 오류도 잡을 것입니다.이 오류는 코드에서 버그를 가릴 수 있으며, 전혀 잡히지 않았을 경우 진단하는 데 더 빨리 진단 할 수 있습니다. 매우 높은 수준의 예외 핸들러에서 더 잘 처리하십시오.

Python2.6 이후, 잡기 예외는 훨씬 더 합리적이되었다고 말했습니다. (SystemExit, Keyboardinterrupt)을 잡고 싶지 않은 모든 예외는 더 이상 예외에서 상속되지 않기 때문입니다. 대신 그들은 대신 공통의 바지에서 물려받습니다. 이것은 일반적인 관용구이기 때문에 비교적 무해한 예외를 만들기 위해 의도적으로 이루어졌습니다.

보다 PEP 3110 세부 사항 및 향후 계획.

당신이 너무 많이 잡고 있다고 생각하기 때문입니다. 그리고 맞습니다.

예외가 발생하면 예외가 발생합니다. 일반적으로 프로그램이 종료하는 것이 좋습니다.

몇 가지 예외를 무시하고 싶을 수도 있지만 IMO는 그런베이스 클래스를 잡을 이유가 없습니다.

그렉의 대답과 마찬가지로 '예외'는 기본 클래스이며 예외는이 클래스에서 파생되어야합니다. 예외. 노출.

여기에 매우 유용합니다 오류 목록 pydocs

예외가 어디에서 발생했는지 확인할 수있는 매우 편리한 트레이스 백 모듈도 참고하십시오. '제외 : ...'만 사용하면 경우에 가장 잘 사용해야 할 오류가 표시됩니다. 예를 들어,이 코드를 사용해보십시오 (주석을 전환). 아마도 수락 할 것입니다.

import traceback
#absent = 'nothing'
try:
    something = absent
except  NameError:
    traceback.print_exc()
else:
    print("you get here only when you uncomment 'absent'") 

예외를 포착하는 (다시 레이아웃없이) 두 가지 나쁜 부작용이 있습니다. 오류가 섭취되므로 스택 추적을 잃어 버릴뿐만 아니라 CTRL-C (또는 운영 체제의 브레이크 키가 무엇이든)도 여기에서 처리됩니다.

이와 같은 프로그램의 일반적인 동작은 중지 할 수 없거나 Ctrl-C가 제어 흐름이 전진 (예외 핸들러로)을 건너 뛰는 다음 계속한다는 것입니다. 그런 다음 코드를 중단 할 수 없거나 CTRL-C를 망치려면 중지해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top