目次
1. 소개: Python에서 예외 처리의 중요성
프로그래밍에서는 예외와 오류를 피할 수 없습니다. 그러나 예외를 적절히 처리함으로써 프로그램의 예상치 못한 중지를 방지하고 사용자에게 적절한 오류 메시지를 제공할 수 있습니다. Python에서는 이러한 예외를 다루기 위한 강력한 메커니즘이 제공됩니다. 예외 처리를 활용하면 프로그램의 신뢰성이 향상되고 보다 원활하게 동작합니다. 예를 들어, 사용자가 0으로 나누는 계산을 하거나 존재하지 않는 파일을 열려고 할 경우, 예외 처리가 없으면 프로그램은 즉시 중지됩니다. 그러나 예외를 적절히 처리하면 프로그램을 계속 실행하거나 사용자에게 이해하기 쉬운 오류 메시지를 표시할 수 있습니다.2. Python 예외 처리: 기본 구문과 흐름
Python에서는 예외 처리를 위해 주로 3개의 키워드가 사용됩니다。try
、except
、그리고 finally
입니다。2.1 try
문으로 오류를 감지하기
try
문은, 오류가 발생할 가능성이 있는 처리를 감싸기 위해 사용됩니다。구체적으로는, 네트워크 작업이나 파일 처리, 사용자 입력 등 실행 시 오류가 발생할 가능성이 있는 부분을try
블록으로 감쌉니다。try:
result = 10 / 0
except:
print("오류가 발생했습니다")
위 예에서는、10 / 0
이라는 무효한 연산으로 예외가 발생하고、except
블록이 실행됩니다。2.2 except
문으로 오류를 처리하기
except
문은, 발생한 예외를 잡아 처리합니다。오류가 발생했을 때, 프로그램이 예상치 못한 동작을 하지 않도록、except
로 적절한 처리를 수행합니다。예외의 종류마다 다른 처리를 기술하는 것도 가능합니다。try:
print(a)
except NameError:
print("변수가 정의되어 있지 않습니다")
except ZeroDivisionError:
print("0으로 나눌 수 없습니다")
이와 같이, 여러 예외에 대해 개별 처리를 설정할 수 있습니다。2.3 finally
문으로 리소스를 확실히 해제하기
finally
문은, 예외 발생에 관계없이 반드시 실행되는 블록입니다。파일 작업이나 네트워크 리소스를 사용하고 있는 경우, 예외가 발생해도 반드시 리소스를 해제하기 위해 사용됩니다。try:
file = open("test.txt", "r")
finally:
file.close()
이와 같이, 파일 작업이나 데이터베이스 연결 등, 리소스 관리을 확실히 해야 하는 상황에서finally
는 매우 유용합니다。
3. 자주 사용되는 예외와 그 처리 방법
Python에서는 다양한 종류의 예외가 제공됩니다. 아래에 대표적인 예외와 그 처리 방법을 몇 가지 소개합니다.3.1 NameError
:정의되지 않은 변수를 사용한 경우
NameError
는 정의되지 않은 변수를 참조했을 때 발생합니다. 예를 들어, 변수가 초기화되지 않은 경우 등이 있습니다。try:
print(a)
except NameError:
print("변수가 정의되어 있지 않습니다")
3.2 TypeError
:다른 타입을 조작하려고 한 경우
TypeError
는 서로 다른 데이터 타입을 부적절하게 조작할 때 발생합니다. 예를 들어, 숫자형과 문자열형을 더하려고 하면 발생합니다。try:
result = '10' + 5
except TypeError:
print("다른 타입을 조작하려고 했습니다")
3.3 ValueError
:부적절한 값이 전달된 경우
ValueError
는 유효하지 않은 값이 전달될 때 발생합니다. 예를 들어, 문자열을 정수로 변환하려고 한 경우 등이 있습니다。try:
number = int("abc")
except ValueError:
print("부적절한 값이 전달되었습니다")
4. 여러 예외를 처리하는 방법
Python에서는 하나의try
블록 내에서 여러 예외를 잡을 수 있습니다. 또한 하나의except
문으로 여러 예외를 한꺼번에 처리할 수도 있습니다.4.1 여러 예외를 개별적으로 처리하기
여러 예외에 대해 개별적으로 처리하려면, 여러except
블록을 사용합니다。try:
result = 10 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다")
except NameError:
print("변수가 정의되어 있지 않습니다")
4.2 여러 예외를 한꺼번에 처리하기
여러 예외에 대해 같은 처리를 하고 싶을 때, 하나의except
문으로 예외를 한꺼번에 잡을 수 있습니다。try:
result = 10 / '10'
except (ZeroDivisionError, TypeError):
print("잘못된 연산이 발생했습니다")
이와 같이, 서로 다른 예외에 대해 공통의 처리를 함으로써 코드를 간결하게 유지할 수 있습니다。5. 사용자 정의 예외와raise
문의 활용
Python에서는 표준 예외로는 다룰 수 없는 특수한 상황에 대해 독자적인 예외를 정의할 수 있습니다. 이러한 커스텀 예외는, raise
문을 사용하여 의도적으로 발생시킬 수 있습니다.5.1 raise
문으로 커스텀 예외를 발생시키기
예를 들어, 음수 값이 전달된 경우 오류를 발생시키는 커스텀 예외를 다음과 같이 정의할 수 있습니다.def check_value(value):
if value < 0:
raise ValueError("음수 값은 허용되지 않습니다")
return value
try:
check_value(-10)
except ValueError as e:
print(e)
raise
문을 사용함으로써, 오류 발생을 제어하고 적절한 오류 메시지를 표시할 수 있습니다.6. 요약 및 베스트 프랙티스
예외 처리는 Python 프로그램을 보다 견고하고 안전하게 만들기 위해 필수적인 기능입니다. 아래에 예외 처리를 수행할 때의 베스트 프랙티스를 정리합니다。- 구체적인 예외를 잡는다: 예외를 잡을 때는 가능한 구체적인 오류 유형을 지정하고, 일반적인
Exception
을 남용하지 않도록 합시다. 이렇게 하면 예상치 못한 예외를 효과적으로 처리할 수 있습니다。 - 리소스 관리를 철저히 한다: 파일이나 네트워크 연결과 같은 리소스는 반드시
finally
블록에서 정리 작업을 수행하는 것이 권장됩니다。 - 에러 메시지를 이해하기 쉽게: 사용자에게 에러 메시지를 표시할 때는 발생한 문제의 원인을 명확히 하고, 어떻게 대처하면 되는지를 알려주도록 노력합시다。