Python 프로그래밍에서 오류 상황을 명확하게 전달하려면 구체적(specific)인 예외를 발생시키는 것이 중요합니다. 모든 상황에 범용적인 Exception을 사용하기보다는, 문제의 성격에 가장 잘 맞는 예외 생성자를 선택해야 합니다.그 이유는 간단합니다. 만약 특정 예외를 잡고(catch) 싶은데 그 예외가 너무 일반적이라면, 해당 예외를 상속하는 더 구체적인 모든 하위 예외들까지 함께 처리하게 되어 코드의 의도가 불분명해지기 때문입니다. 따라서 발생시킬 때도 구체적으로, 처리할 때도 동일한 구체적 예외로 다루는 것이 좋은 습
Python에서 발생한 예외를 효과적으로 기록하려면 logging 모듈을 활용하는 것이 가장 좋습니다. 특히 logging.exception() 메서드를 사용하면 예외가 발생한 지점의 스택 트레이스(traceback)까지 함께 로그에 남길 수 있어 디버깅에 매우 유용합니다.아래 예제처럼 try-except 블록 안에서 logging.exception()을 호출하면, 오류 메시지와 함께 어떤 코드에서 문제가 발생했는지 상세하게 확인할 수 있습니다.예제 코드import logging try: print(toy + 6) exce
현대 Python에서 사용자 정의 예외 선언하기 Python에서 기본 제공되는 Exception 클래스만으로는 부족한 경우가 많습니다. 예외 객체에 추가 정보를 담거나 기본 동작을 확장하고 싶다면 Exception을 상속받아 사용자 정의 예외 클래스를 만드는 것이 좋습니다. 추가 인자를 전달하는 사용자 정의 예외 예외에 추가 인자를 전달하거나 기본 동작을 재정의(오버라이드)하려면 __init__ 메서드를 직접 구현하면 됩니다. 현대 Python에서 권장되는 작성 방식은 다음과 같습니다. class ValidationError(Exc
대부분의 예외가 Error로 끝나는 이유파이썬에서 ZeroDivisionError, NameError, TypeError처럼 대부분의 예외 클래스 이름이 Error로 끝나는 것을 쉽게 발견할 수 있습니다. 예외란 결국 프로그램에서 발생하는 오류 상황을 의미하기 때문에, 이름에 Error를 붙여 그 성격을 명확하게 드러내는 것입니다.오류와 예외의 구분엄밀한 의미에서 파이썬에서 말하는 오류(Error)는 문법 오류(syntax error)를 가리키며, 실행 중에 발생하는 오류는 예외(Exception)라고 부릅니다.그런데 흥미롭게도 파
파이썬에서는 프로그램 실행 중 발생하는 오류(예외) 메시지를 여러 가지 방식으로 캡처하고 출력할 수 있습니다. 이 글에서는 두 가지 대표적인 방법을 코드 예제와 함께 살펴보고, 최신 파이썬 3 환경에서의 권장 방식까지 함께 안내합니다.1. 예외 객체의 message 속성 사용하기첫 번째 방법은 except 블록에서 전달받은 예외 객체(e)의 message 속성을 그대로 출력하는 것입니다.예제try: a = 7/0 print float(a)except BaseException as e: print e.message출력
실제 개발 환경에서는 except 절 안의 코드 자체가 또 다른 예외를 발생시키는 상황이 종종 발생합니다. 이럴 때는 중첩된(nested) try-except 구문을 사용하면 except 절에서 발생한 예외까지 효과적으로 처리할 수 있습니다.예제 코드다음 예제는 외부 except 절에서 새로운 예외가 발생했을 때, 이를 내부 try-except 블록으로 처리하는 방법을 보여줍니다.import sys try: a = john # 정의되지 않은 변수 → NameError 발생 except: try:
예외도 객체입니다네, 질문에 나온 코드에서 err는 하나의 예외 객체(exception object)입니다.파이썬에서는 숫자, 문자열, 리스트, 함수에 이르기까지 모든 것이 객체입니다. 그리고 모든 객체는 속성(attribute)과 메서드(method)를 가지고 있습니다. 마찬가지로 예외도 리스트나 튜플, 함수처럼 하나의 객체이며, 다른 객체들과 동일하게 고유한 속성들을 가집니다. 즉, 예외의 속성도 언제든지 설정하고 읽어올 수 있습니다.예외 객체의 기본 클래스와 속성거의 모든 예외는 Exception이라는 기본 클래스(base c
파이썬 코드 실행 중 예외(exception)가 발생하면 이를 try-except 문으로 잡아내어 예외의 유형(type), 오류 메시지(error message), 트레이스백(traceback)을 출력할 수 있습니다. 또한 예외가 발생한 파일 이름과 줄 번호(line number) 같은 상세 정보도 함께 확인할 수 있습니다.sys.exc_info() 함수란?발생한 오류에 대한 정보는 크게 세 가지 매개변수로 구성됩니다.Type(유형): 발생한 예외의 종류를 나타냅니다. 예를 들어 ZeroDivisionError, NotImpleme
파이썬 예외 관련 신뢰할 수 있는 참조 문서파이썬에서 발생하는 다양한 예외(Exception)의 종류와 의미를 정확히 이해하고 싶다면, 가장 먼저 확인해야 할 곳은 바로 공식 문서입니다. 공식 문서는 파이썬에 내장된 모든 예외 클래스를 체계적으로 정리해 두고 있어, 개발 중 마주치는 오류 메시지를 해석하거나 적절한 예외 처리 코드를 작성할 때 큰 도움이 됩니다.예외 문서 바로가기아래 링크는 파이썬 내장 예외(built-in exceptions)에 대한 대표적인 참조 문서입니다.https://docs.python.org/2/libra
IOError 예외란? IOError(입출력 오류)는 입력/출력 작업이 실패했을 때 발생하는 예외입니다. 대표적인 예로, 존재하지 않는 파일을 open() 함수로 열려고 시도하는 경우가 있으며, print 문처럼 표준 출력 스트림과 관련된 작업에서도 발생할 수 있습니다. 그 외에도 운영체제와 관련된 오류가 발생했을 때 이 예외가 나타납니다. 참고로 파이썬 3부터는 IOError가 OSError의 별칭(alias)이 되어 두 이름을 동일하게 사용할 수 있습니다. 오류가 발생할 가능성이 있는 코드를 try 블록 안에 작성하면, 실행
ArithmeticError 예외는 숫자 계산 과정에서 발생하는 모든 오류의 기본 클래스입니다. 파이썬에서 산술 연산과 관련된 주요 내장 예외들은 대부분 이 클래스를 상속받습니다.ArithmeticError를 직접 상속받는 대표적인 내장 예외는 다음과 같습니다.OverflowError – 연산 결과가 표현 가능한 수치 범위를 초과할 때 발생합니다.ZeroDivisionError – 0으로 나누기 또는 0으로 나머지 연산을 수행할 때 발생합니다.FloatingPointError – 부동소수점 연산이 실패할 때 발생합니다.따라서 exc
파이썬에서 산술 연산의 결과가 해당 변수 타입이 표현할 수 있는 범위를 초과하면 OverflowError가 발생합니다. 다만 예외 동작은 데이터 타입에 따라 조금씩 다릅니다.정수(Integer): 일반 정수는 값이 커질 때 필요에 따라 자동으로 long 타입으로 변환되며, long 정수는 값이 증가함에 따라 더 많은 메모리를 동적으로 할당하기 때문에 오버플로우 대신 MemoryError가 발생할 수 있습니다.부동 소수점(Float): 부동 소수점 연산의 오버플로우 처리는 표준화되어 있지 않으며, 표현 가능한 최대값을 초과하면 Ove
IndexError는 리스트나 튜플과 같은 시퀀스 자료형에서 유효 범위를 벗어난 인덱스에 접근하려고 할 때 발생하는 예외입니다. 예를 들어 요소가 5개뿐인 리스트의 여섯 번째 항목에 접근하면 이 오류가 발생합니다. 이러한 예외는 try-except 문을 사용하면 프로그램이 비정상적으로 종료되지 않도록 안전하게 처리할 수 있으며, 예외 객체를 통해 오류 메시지와 예외 타입까지 확인할 수 있습니다. 예제 코드 import sys try: my_list = [3, 7, 9, 4, 6] print(my_list[6])
NameError란 무엇인가?파이썬에서 NameError는 코드가 현재 범위(scope)에 존재하지 않는 이름을 참조할 때 발생하는 예외입니다. 대표적인 예로는 정의되지 않은 변수 이름을 사용하거나, 변수를 선언하기 전에 먼저 사용하는 경우가 있습니다.이러한 오류는 try-except 블록을 사용하면 손쉽게 잡아낼 수 있으며, 예외 객체를 통해 어떤 이름이 문제였는지 확인할 수 있습니다.예외 잡기 예제다음 코드는 정의되지 않은 변수를 참조할 때 발생하는 NameError를 잡고, 예외 메시지와 타입을 함께 출력하는 예제입니다.imp
EOFError란 무엇인가?EOFError는 input() 같은 내장 함수가 입력 스트림의 끝(EOF)에 도달했는데 아무 데이터도 읽지 못한 경우에 발생하는 예외입니다. 반면 파일 객체의 read() 메서드처럼 파일을 다루는 함수들은 파일 끝에 도달하면 빈 문자열을 반환하기 때문에 예외가 발생하지 않습니다.즉, 프로그램이 사용자 입력을 기다리고 있는데 더 이상 읽을 데이터가 없을 때 EOFError가 발생합니다. 대표적인 발생 상황은 다음과 같습니다.터미널에서 Ctrl+D(Linux/macOS) 또는 Ctrl+Z(Windows)를
SyntaxError는 파서(parser)가 이해할 수 없는 소스 코드를 만났을 때 발생하는 예외입니다. 이 오류는 모듈을 가져올 때(import), exec()를 호출할 때, 또는 eval() 함수를 실행할 때 나타날 수 있습니다.SyntaxError 예외가 가지고 있는 속성들을 활용하면, 입력된 코드 중 정확히 어느 부분이 문제를 일으켰는지 파악할 수 있습니다. 주요 속성은 다음과 같습니다.filename: 오류가 발생한 파일의 이름lineno: 오류가 발생한 줄 번호offset: 해당 줄에서 오류가 시작되는 문자 위치text:
IndentationError는 파서(parser)가 소스 코드가 들여쓰기 규칙을 따르지 않는 부분을 발견할 때 발생하는 예외입니다. 이 오류는 구문 분석(컴파일) 단계에서 발생하기 때문에, 일반적인 런타임 예외처럼 아무 위치에서나 잡을 수 있는 것은 아닙니다. IndentationError를 잡을 수 있는 경우와 없는 경우 모듈은 처음 임포트될 때 컴파일되므로, 이 시점에 발생하는 IndentationError는 try/except 블록으로 잡을 수 있습니다. 반면, try/except 블록이 포함된 같은 모듈 안에서는 잡을 수
TypeError는 서로 호환되지 않는 타입의 객체를 결합하거나, 함수에 잘못된 타입의 객체를 인자로 전달할 때 발생하는 대표적인 파이썬 예외입니다.TypeError가 발생하는 일반적인 경우리스트와 문자열처럼 서로 다른 자료형을 연산자로 결합하려 할 때숫자와 문자열을 더하려고 할 때함수에 기대한 타입과 다른 객체를 전달했을 때이러한 오류를 프로그램이 비정상적으로 종료되지 않도록 처리하려면 try-except 블록을 사용합니다. except TypeError as e 구문을 활용하면 발생한 예외 객체를 변수에 담아 오류 메시지와 예외
EnvironmentError는 운영체제, 파일 시스템 등 파이썬 외부 환경에서 발생하는 오류들을 위한 기본 클래스(Base Class)입니다.EnvironmentError란?EnvironmentError는 표준 예외 계층 구조에 속하며, IOError와 OSError 예외의 상위(부모) 클래스 역할을 합니다.흥미로운 점은 EnvironmentError 자체는 실제로 발생(raised)하지 않는다는 것입니다. 대신 파일을 열지 못하거나 디렉터리를 찾지 못하는 등의 상황에서 그 하위 클래스인 IOError나 OSError가 대신 발생
LookupError 예외란 무엇인가?LookupError는 파이썬에서 무언가를 찾을 수 없을 때 발생하는 오류들의 기본(Base) 클래스입니다. 매핑(mapping)이나 시퀀스(sequence)에 사용된 키(key) 또는 인덱스(index)가 유효하지 않을 때 발생하는 예외들의 상위 클래스이며, 대표적인 하위 클래스로는 IndexError와 KeyError가 있습니다.LookupError의 주요 하위 클래스IndexError: 시퀀스(리스트, 튜플 등)의 참조 범위를 벗어났을 때 발생합니다.KeyError: 딕셔너리에 존재하지 않