예외 처리를 위한 구문으로, 프로그램 실행 중 예외가 발생하면 프로그램이 강제 종료되는 것을 방지하고 예외 상황을 처리할 수 있도록 해줍니다.
try
블록 안에서 예외가 발생하면, 해당 예외에 맞는 except
블록으로 이동하여 예외를 처리합니다. 이때 except 블록의 예외 타입과 발생한 예외의 타입
이 일치해야 처리가 가능합니다.
0으로 나누는 것은 ZeroDivisionError가 발생하여 try 블록의 코드가 진행되지 않고 except 블록의 코드가 실행되게 됩니다.
try:
a = 5 / 0
print(f'a is {a}')
except ZeroDivisionError:
print('Exception')
예외가 발생하였을 때 오류의 내용을 알고 싶다면 as
를 사용하여 오류의 내용을 확인할 수 있습니다.
try:
a = 5 / 0
print(f'a is {a}')
except ZeroDivisionError as e:
print(f'Error : {e}') # Error : division by zero
예외의 경우를 나누는 것이 좋지만 다음과 같이 모든 예외를 처리할 수 있습니다.
try:
a = 5 / 0
print(f'a is {a}')
except Exception as e:
print(f'Error : {e}') # Error : division by zero
💡 오류의 내용이 상관이 없다면 except:만 사용해도 무방합니다.
else
를 사용하여도 try 블록에서 예외가 없다면 계속 코드를 진행시킬 수 있습니다.
try:
a = 5 / 1
print('try')
except:
print('except')
else:
print('else')
코드 실행 중 예외가 발생하거나 정상적으로 실행되거나 상관없이 항상 수행되게 하려면 finally
블록을 사용합니다.
try:
a = 5 / 1
print('try') # try
except:
print('except')
finally:
print('finally') # finally
프로그램에서 예외적인 상황이 발생하면 이를 처리하기 위해 try-except 문을 사용하여 예외 처리를 할 수 있습니다.
하지만 때로는 특정 조건이 만족되면 예외를 발생시켜 프로그램 흐름을 강제로 중단해야 할 경우가 있습니다. 이때 raise
를 사용합니다.
다음은 0으로 나누지 않았지만 raise를 이용하여 고의적으로 ZeroDivisionError를 발생시켰습니다. 일반적인 raise를 발생하고자 한다면 Exception를 사용할 수 있습니다.
try:
a = 5 / 1
raise ZeroDivisionError('Hello, Raise!')
except Exception as e:
print(f'Error : {e}') # Error : Hello, Raise!
else:
print('else')