복붙노트

[PYTHON] 파이썬에서 모든 예외를 잡기위한 나쁜 생각

PYTHON

파이썬에서 모든 예외를 잡기위한 나쁜 생각

파이썬에서 모든 예외를 잡는 것은 왜 나쁜 생각입니까?

나는 except : clause를 사용하여 모든 예외를 잡는 것이 SystemExit, KeyboardInterrupt 및 GeneratorExit의 '특별한'파이썬 예외를 잡아낼 수도 있음을 이해합니다. 그렇다면 예외를 제외한 모든 예외를 잡기 위해 예외 조항을 사용하지 않는 이유는 무엇입니까?

해결법

  1. ==============================

    1.대단히 비특이적이며 예외로 인해 흥미로운 것을 할 수 없기 때문입니다. 더욱이, 모든 예외를 포착하는 경우에는 일어나는 상황을 알지 못하는 많은 예외가있을 수 있습니다 (이로 인해 애플리케이션이 실제로 이유를 알지 못하면 실패 할 수 있음). 처리 할 필요가있는 예외와 처리 방법을 구체적으로 예측할 수 있어야합니다 (처음에는 문서 또는 실험을 읽음). 그러나 처음부터 맹목적으로 모든 것을 억압하면 절대 알 수 없습니다.

    대단히 비특이적이며 예외로 인해 흥미로운 것을 할 수 없기 때문입니다. 더욱이, 모든 예외를 포착하는 경우에는 일어나는 상황을 알지 못하는 많은 예외가있을 수 있습니다 (이로 인해 애플리케이션이 실제로 이유를 알지 못하면 실패 할 수 있음). 처리 할 필요가있는 예외와 처리 방법을 구체적으로 예측할 수 있어야합니다 (처음에는 문서 또는 실험을 읽음). 그러나 처음부터 맹목적으로 모든 것을 억압하면 절대 알 수 없습니다.

    그래서, 대중적인 요청에 의해, 여기에 예가 있습니다. 프로그래머는 Python 코드를 작성하고 IOError를 얻습니다. 더 조사하는 대신 그녀는 모든 예외를 잡기로 결정합니다.

    def foo():
        try:
            f = open("file.txt")
            lines = f.readlines()
            return lines[0]
        except:
            return None
    

    그녀는 자신의 방식으로 문제를 인식하지 못합니다. 파일이 존재하고 액세스 가능하지만 비어 있다면 어떻게해야합니까? 그런 다음이 코드는 IndexError를 발생시킵니다 (목록 행이 비어 있으므로). 그래서 그녀는 왜 그녀가 점점 더 많은 시간을 보냈 을까? 파일이 존재할 때이 함수에서 None을 반환하고, 오류를 포착하는 데있어 더 구체적 일지 모르는 뭔가를 깨닫지 못하면 잠글 수 없습니다. 있다.

  2. ==============================

    2.아마도 각 예외를 다르게 처리하기를 원할 것입니다. Encoding 문제 나 OS 하나를 가진 것보다 KeyInterrupt를 갖는 것은 똑같지는 않습니다 ... 특정 예외를 하나씩 잡을 수 있습니다.

    아마도 각 예외를 다르게 처리하기를 원할 것입니다. Encoding 문제 나 OS 하나를 가진 것보다 KeyInterrupt를 갖는 것은 똑같지는 않습니다 ... 특정 예외를 하나씩 잡을 수 있습니다.

    try:
        XXX
    except TYPE:
        YYY
    except TYPE:
        ZZZ
    
  3. from https://stackoverflow.com/questions/10594113/bad-idea-to-catch-all-exceptions-in-python by cc-by-sa and MIT license