CodeGym /행동 /Python SELF KO /예외 처리

예외 처리

Python SELF KO
레벨 17 , 레슨 2
사용 가능

3.1 예외 잡기

우리가 예외에 대해 이렇게 많이 얘기하지 않을 이유는 그냥 지켜보기만 하면 되는 게 아니라서 그래. 예외는 Python 프로그램에서 처리할 수 있는 특별한 객체야. 예외 처리는 프로그램의 신뢰성과 견고성을 높일 수 있는 중요한 프로그래밍 측면이야.

Python에서는 try, except, else, finally 같은 구조를 사용해서 예외를 잡고 처리해. 이 구조를 통해 프로그램 실행 중 발생하는 오류를 잡고 적절한 조치를 취할 수 있어.

try-except 구조

try-except 구조는 예외를 잡고 처리하는데 사용돼. try 블록에는 예외를 발생시킬 수 있는 코드가 들어가고, except 블록에는 예외가 발생했을 때 실행될 코드가 들어가.

예제:


try:
    result = 10 / 0
except ZeroDivisionError:
    print("오류: 0으로 나누기.")

try 블록 내부의 코드에서 ZeroDivisionError 예외가 발생하면 except 블록이 그 예외를 잡고 print() 호출이 실행돼.

여러 예외 처리하기

여러 종류의 예외를 처리하고 싶다면, 각기 다른 except 블록에 명시할 수 있어.


try:
    result = int("abc")
except ZeroDivisionError:
    print("오류: 0으로 나누기.")
except ValueError:
    print("오류: 잘못된 값.")

모든 예외 잡기

모든 예외를 잡고 싶다면, 특정 예외 타입을 명시하지 않은 except 블록을 사용할 수 있어. 하지만 이 방법은 추천하지 않아, 디버깅을 어렵게 하고 중요한 오류를 숨길 수 있거든.


try:
    result = 10 / 0
except:
    print("오류가 발생했습니다.")

3.2 elsefinally 구문

tryexcept 외에도 elsefinally 같은 선택사항이 있어. 지금부터 이들에 대해 좀 더 자세히 설명할게.

try-except-else 구조

else 블록try 블록에서 예외가 발생하지 않았을 때 코드를 실행하는 데 사용돼.


try:
    result = 10 / 2
except ZeroDivisionError:
    print("오류: 0으로 나누기.")
else:
    print(f"결과: {result}")

try-except-finally 구조

finally 블록은 예외 발생 여부와 상관없이 항상 실행되는 코드를 포함해. 리소스를 해제하거나 마무리 작업을 수행하는 데 유용해.


try:
    result = 10 / 0
except ZeroDivisionError:
    print("오류: 0으로 나누기.")
finally:
    print("이 블록은 항상 실행됩니다.")

전체 예제: try-except-else-finally

예제:


try:
    result = 10 / 2
except ZeroDivisionError:
    print("오류: 0으로 나누기.")
else:
    print(f"결과: {result}")
finally:
    print("이 블록은 항상 실행됩니다.")

3.3 try-except-else-finally 예제

좀 더 큰 실제 예제를 살펴보자. 예를 들어, 디스크에서 파일을 읽으려고 할 때 — 이보다 쉬운 게 있을까?


file = open("file.txt", "r")
content = file.read()
print(content)

뭐가 잘못될 수 있을까? 예를 들면, 모든 것:

  • 파일이 없을 수 있어. 실수로 삭제됐거나 기록되지 않았을 수 있고, 아니면 프로그램이 전혀 다른 컴퓨터에서 실행되고 있어서 파일이 아예 없을 수 있지.
  • 파일 읽기 오류. 프로그램이 해당 파일에 대한 접근 권한이 없어서, 관리 권한이 필요한 디렉토리에 있을 수 있어.
  • 다른 프로그램이 지금 그 파일에 쓰기를 하고 있어서 읽을 수 없어 — 독점 접근 권한이 다른 프로그램에 있거든.

적은 것 같아? 그렇다면, 파일 작업 중 어느 단계에서 오류가 발생하든 파일을 꼭 '닫아야' 한다는 것을 잊지 마. 그래야 운영체제가 해당 파일 작업에 할당된 리소스를 해제할 수 있어.

그래서 실제 코드는 대략 이렇게 될 거야:


try:
    file = open("non_existent_file.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("오류: 파일을 찾을 수 없습니다.")
except IOError:
    print("오류: 입출력 오류.")
else:
    print(content)
finally:
    if 'file' in locals() and not file.closed:
        file.close()
        print("파일이 닫혔습니다.")

현실 세계에 온 걸 환영해. 여기서는 '정상 시나리오'만을 위한 코드뿐만 아니라 잘못될 수 있는 모든 가능성 있는 시나리오를 위한 코드도 작성해야 해.

뭐, 겁주고 싶진 않아 — 생각보다 간단해. 그냥 경계 조건(corner cases)이 무엇인지 이해하고 표준 오류를 체크하는 것을 제때 추가하면 돼. 나머지는 최신 프레임워크들이 알아서 처리해 줄 거야.

2
과제
Python SELF KO, 레벨 17, 레슨 2
잠금
예외 처리.
예외 처리.
2
과제
Python SELF KO, 레벨 17, 레슨 2
잠금
데이터 변환.
데이터 변환.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION