파이썬 - 예외 처리
안녕하세요, 미래의 파이썬 마법사들! 여러분의 이 흥미로운 파이썬 예외 처리의 여정에서 가이드가 되어서 기쁩니다. 프로그래밍을 여러 년 동안 가르치신 경험을 바탕으로 말하자면, 예외를 이해하는 것은 훈련 바이크를 타는 것과 같습니다 - 처음에는 좀 어려울 수 있지만, 익숙해지면 곧 스ムooth하게 달릴 수 있게 됩니다!
예외란 무엇인가요?
깊은 물 속으로 뛰어들기 전에, 기본적인 것부터 시작해보겠습니다. 케이크를 굽는 것을 상상해보세요 (저랑 같이 해주세요, 이것이 파이썬과 관련이 있을 거라고 보장합니다!). 여러분은 레시피(코드)와 재료(데이터)를 준비했고, 시작할 준비가 되었습니다. 그러나 중간에 달걀이 다 떨어졌을 때 어떻게 될까요? 바쁘는 세상에서의 예외입니다!
파이썬에서 예외는 프로그램이 실행 중에 발생하는 오류입니다. "멈춰! 뭔가 잘못된 것 같아!"라고 플래그가 떠오르는 것과 같습니다.
간단한 예제를 살펴보겠습니다:
print(10 / 0)
이 코드를 실행하면 파이썬은 ZeroDivisionError
를 발생시킵니다. "안녕, 0으로 나눌 수 없어! 나의 주방에서는 허용하지 않아... 아니, 프로그래밍 환경에서는!"라고 말합니다.
파이썬에서의 예외 처리
이제 예외가 무엇인지 알았으니, 예외를 어떻게 우아하게 처리하는지 배워보겠습니다. 파이썬에서는 try
와 except
블록을 사용하여 예외를 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