파이썬 - 예외 처리

안녕하세요, 미래의 파이썬 마법사들! 여러분의 이 흥미로운 파이썬 예외 처리의 여정에서 가이드가 되어서 기쁩니다. 프로그래밍을 여러 년 동안 가르치신 경험을 바탕으로 말하자면, 예외를 이해하는 것은 훈련 바이크를 타는 것과 같습니다 - 처음에는 좀 어려울 수 있지만, 익숙해지면 곧 스ムooth하게 달릴 수 있게 됩니다!

Python - Exceptions

예외란 무엇인가요?

깊은 물 속으로 뛰어들기 전에, 기본적인 것부터 시작해보겠습니다. 케이크를 굽는 것을 상상해보세요 (저랑 같이 해주세요, 이것이 파이썬과 관련이 있을 거라고 보장합니다!). 여러분은 레시피(코드)와 재료(데이터)를 준비했고, 시작할 준비가 되었습니다. 그러나 중간에 달걀이 다 떨어졌을 때 어떻게 될까요? 바쁘는 세상에서의 예외입니다!

파이썬에서 예외는 프로그램이 실행 중에 발생하는 오류입니다. "멈춰! 뭔가 잘못된 것 같아!"라고 플래그가 떠오르는 것과 같습니다.

간단한 예제를 살펴보겠습니다:

print(10 / 0)

이 코드를 실행하면 파이썬은 ZeroDivisionError를 발생시킵니다. "안녕, 0으로 나눌 수 없어! 나의 주방에서는 허용하지 않아... 아니, 프로그래밍 환경에서는!"라고 말합니다.

파이썬에서의 예외 처리

이제 예외가 무엇인지 알았으니, 예외를 어떻게 우아하게 처리하는지 배워보겠습니다. 파이썬에서는 tryexcept 블록을 사용하여 예외를 fångst och hantera.

기본 구조는 다음과 같습니다:

try:
# 예외를 발생시킬 수 있는 코드
except ExceptionType:
# 예외를 처리할 코드

이전 예제를 수정해보겠습니다:

try:
result = 10 / 0
print(result)
except ZeroDivisionError:
print("오류! 0으로 나눌 수 없어.")

이 코드를 실행하면 충돌하지 않고, "오류! 0으로 나눌 수 없어."라고 인쇄합니다.

예외 조건문에 예외가 없을 때

때로는 발생하는 모든 예외를 fångst하고 싶을 수 있습니다. 이 경우, 예외 유형을 지정하지 않고 except 조건문을 사용할 수 있습니다:

try:
# 위험한 코드
x = int(input("숫자를 입력하세요: "))
y = 10 / x
print(y)
except:
print("뭔가 잘못됐어!")

이는 try 블록에서 발생하는 모든 예외를 fångst합니다. 그러나 가능하다면 특정 예외를 fångst하는 것이 좋습니다. 그렇면 코드가 더 정밀하고 디버깅하기 쉬워집니다.

여러 예외를 처리하는 예외 조건문

하나의 except 조건문에서 여러 예외를 처리할 수도 있습니다:

try:
x = int(input("숫자를 입력하세요: "))
y = 10 / x
print(y)
except (ValueError, ZeroDivisionError):
print("유효하지 않은 입력이거나 0으로 나누기!")

이 코드는 ValueError (사용자가 숫자以外的 값을 입력했을 때)와 ZeroDivisionError를 둘 다 fångst합니다.

try-finally 조건문

finally 조건문은 예외가 발생하든 말든 반드시 실행되는 코드를 사용합니다. 파티 후에 도착하는 청소팀과 마찬가지로 - 파티가 어떻게 끝났든 항상 나타나요!

try:
f = open("example.txt", "r")
# 파일에 대한 연산 수행
except FileNotFoundError:
print("해당 파일이 존재하지 않아!")
finally:
f.close()  # 예외가 발생했든 말든 항상 실행됩니다

예외의 인수

예외는 추가 정보를 포함할 수 있습니다. 이 정보를 except 블록에서 액세스할 수 있습니다:

try:
x = 10 / 0
except ZeroDivisionError as e:
print(f"오류 발생: {e}")

이는 "오류 발생: 0으로 나누기"라고 인쇄합니다.

예외를 발생시키기

때로는 여러분 자신이 예외를 발생시키고 싶을 수 있습니다. 게임에서 심판이 패alty를 부릅니다:

def check_age(age):
if age < 0:
raise ValueError("나이는 음수일 수 없어!")
print(f"당신의 나이는 {age}")

try:
check_age(-5)
except ValueError as e:
print(e)

이는 "나이는 음수일 수 없어!"라고 인쇄합니다.

사용자 정의 예외

여러분은 자신만의 예외 유형을 만들 수도 있습니다. 게임에서 새로운 규칙을 발명하는 것과 같습니다:

class TooManyPizzasError(Exception):
pass

def order_pizza(number):
if number > 100:
raise TooManyPizzasError("100개 이상의 피자를 주문할 수 없어!")
print(f"{number}개의 피자 주문 완료.")

try:
order_pizza(101)
except TooManyPizzasError as e:
print(e)

파이썬에서의 어서션

어서션은 특정 조건이 충족되었는지 확인하는 방법입니다. 코드에서 작은 체크포인트와 같습니다:

def divide(a, b):
assert b != 0, "나누기에는 0이 될 수 없어!"
return a / b

try:
result = divide(10, 0)
except AssertionError as e:
print(e)

이는 "나누기에는 0이 될 수 없어!"라고 인쇄합니다.

표준 예외

파이썬은 미리 구성된 예외 집합을 제공합니다. 여기 몇 가지 일반적인 예외가 있습니다:

예외 이름 설명
ZeroDivisionError 0으로 나누거나 나머지 연산이 발생했을 때 발생
ValueError 함수가 올바른 유형의 인수를 받았지만 잘못된 값일 때 발생
TypeError 잘못된 유형의 객체에 연산이나 함수가 적용될 때 발생
NameError 로컬이나 전역 이름이 발견되지 않았을 때 발생
FileNotFoundError 요청된 파일이나 디렉토리가 존재하지 않을 때 발생
IndexError 시퀀스 서브스크립트가 범위를 벗어났을 때 발생
KeyError 딕셔너리 키가 발견되지 않았을 때 발생
ImportError 임포트 선언이 실패했을 때 발생

그리고 여기 있습니다, 여러분! 파이썬 예외 처리의 급습 과정을 마쳤습니다. 예외는 여러분의 적이 아니라, 더 나은, 더 견고한 코드를 안내하는 유용한 가이드 포스트와 같습니다. 계속 연습하고 실험해보세요, 예외를 전문가처럼 처리하는 데 빨리 도달하실 거예요. 즐거운 코딩!

Credits: Image by storyset