4.1 여러 예외 잡기
Python에서는 여러 except
블록이나 예외 튜플이 있는 하나의 except
블록을 사용하여 여러 예외를 처리할 수 있어. 둘 다 알아보자.
여러 except
블록
여러 except
블록을 사용하여 서로 다른 유형의 예외를 다르게 처리할 수 있어.
try:
# 예외를 발생시킬 수 있는 코드
result = int("abc")
except ValueError:
print("오류: 잘못된 값.")
except ZeroDivisionError:
print("오류: 0으로 나누기.")
예외 튜플이 있는 하나의 except
블록
여러 예외를 하나의 except
블록에서 처리할 수 있고, 예외를 튜플로 전달할 수 있어.
try:
# 예외를 발생시킬 수 있는 코드
result = int("abc")
except (ValueError, ZeroDivisionError) as e:
print(f"오류 발생: {e}")
except
NameError
as
var
사용하기
예외를 처리할 때, 예외 객체를 얻기 위해 except
<ExceptionType>
as
<variable>
문법을 사용할 수 있어. 이렇게 하면 오류 메시지 및 기타 속성과 같은 예외 정보를 얻을 수 있어.
try:
# NameError를 발생시킬 수 있는 코드
print(undeclared_variable)
except NameError as e:
print(f"오류 발생: {e}")
print(f"오류 타입: {type(e)}")
4.2 오류 변수의 범위
예외를 저장하는 변수 (e
위 예제에서)는 자신의 except
블록 내에서만 사용할 수 있어. 이 블록 밖에서는 변수를 사용할 수 없어.
try:
# NameError를 발생시킬 수 있는 코드
print(undeclared_variable)
except NameError as e:
print(f"오류 발생: {e}")
print(f"오류 타입: {type(e)}")
# 여기서 e는 더 이상 사용할 수 없고, 다음 줄은 NameError를 발생시킬 거야
# print(e) # NameError: name 'e' is not defined
예외를 블록 밖에서 처리해야 하는 경우, 별도의 변수에 저장해야 해. 예제:
exception = None
try:
# 예외를 발생시킬 수 있는 코드
result = int("abc")
except ValueError as e:
exception = e
print("오류: 잘못된 값.")
except ZeroDivisionError as e:
exception = e
print("오류: 0으로 나누기.")
print(exception)
exception
변수는 마지막에 발생한 예외를 저장한다는 점을 주의해. 이는 try
블록 밖에서의 후속 처리에 유용할 수 있어.
4.3 오류에 있는 유용한 정보
예외 객체는 오류에 대한 정보를 포함하고 있어. 예외 유형에 따라 객체는 다양한 속성을 가질 수 있어.
다음은 대부분의 예외에서 사용할 수 있는 일반적인 속성들:
-
args
: 예외 생성 시 전달된 인수를 포함하는 튜플. 일반적으로 오류 메시지를 포함해. -
message
: 오류 메시지를 포함하는 문자열 (일부 예외에서). -
__str__
: 예외의 문자열 표현을 반환하는 메소드. 이 메소드는 예외 객체에 대해print()
함수를 사용할 때 반환되는 텍스트 표현을 얻는 데 사용돼.
예제:
try:
# ValueError를 발생시킬 수 있는 코드
result = int("abc")
except ValueError as e:
print(f"오류 발생: {e}")
print(f"오류 인수: {e.args}")
print(f"오류 메시지: {str(e)}")
여러 예외 처리 예제
try:
# 여러 유형의 예외를 발생시킬 수 있는 코드
result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
print(f"오류 발생: {e}")
print(f"오류 타입: {type(e)}")
print(f"오류 인수: {e.args}")
ValueError
또는 ZeroDivisionError
가 발생하면 except
블록에 의해 잡히게 돼. 예외에 관한 정보는 e
변수를 통해 사용할 수 있어. 출력은 오류 유형과 예외 생성 시 전달된 인수를 포함할 거야.
GO TO FULL VERSION