1. 예외
예외(Exception)는 프로그램 실행 중 발생할 수 있는 예상치 못한 문제 또는 오류 상황을 의미합니다. 예외가 발생하면 프로그램은 중단되기 때문에 이를 적절하게 처리하여 중단을 방지하거나 오류에 대한 정보를 사용자에게 제공해야 합니다.
ValueError
- 잘못된 값을 함수나 연산에 제공할 때 발생합니다.
- 예) 숫자가 아닌 문자열을 int() 함수로 변환하려고 할 때 발생.
TypeError
- 올바르지 않은 유형의 객체를 연산에 사용하려 할 때 발생합니다.
- 예) 문자열과 숫자를 함께 더하려고 할 때 발생.
ZeroDivisionError
- 숫자를 0으로 나누려고 할 때 발생합니다.
IndexError
- 리스트, 튜플, 문자열 등의 시퀀스 유형에서 범위를 벗어난 인덱스에 접근하려 할 때 발생합니다.
- 예) 길이가 3인 리스트에 대해 4번째 요소에 접근하려고 할 때 발생.
KeyError
- 딕셔너리에서 존재하지 않는 키를 사용하여 값을 검색하려고 할 때 발생합니다.
AttributeError
- 객체에 없는 속성이나 메서드에 접근하려고 할 때 발생합니다.
FileNotFoundError
- 존재하지 않는 파일을 열려고 할 때 발생합니다.
ImportError
- 존재하지 않는 모듈을 가져오려고 할 때 또는 모듈 내에 해당 속성/함수가 없을 때 발생합니다.
NameError
- 정의되지 않은 변수나 함수를 사용하려고 할 때 발생합니다.
- 예) 프로그램에서 정의되지 않은 변수 x를 사용하려고 할 때 발생.
OverflowError
- 수치 연산 결과가 너무 커서 표현할 수 없을 때 발생합니다.
MemoryError
- 프로그램이 사용 가능한 모든 메모리를 소진했을 때 발생합니다.
2. 예외처리 기본구조
try:
# 예외가 발생할 가능성이 있는 코드
except ExceptionType1: # 'ExceptionType1'에는 실제 예외 유형이 들어갑니다.
# ExceptionType1 예외가 발생했을 때 실행될 코드
except ExceptionType2: # 'ExceptionType2'에는 다른 예외 유형이 들어갑니다.
# ExceptionType2 예외가 발생했을 때 실행될 코드
# 추가적인 except 블록을 계속 추가할 수 있습니다.
else:
# try 블록에서 예외가 발생하지 않았을 때 실행될 코드
finally:
# 예외 발생 여부와 관계없이 항상 실행될 코드
except: 만 사용: 하면 프로그램 종료나 키보드 중단과 같은 특수한 예외까지 처리할 수 있지만, 대부분의 상황에서 이렇게 예외 처리는 권장되지 않습니다.
except Exception as e:는 일반적인 예외만 처리하면서, 발생한 예외의 상세 정보에 접근할 수 있는 능력을 제공합니다. 이 형태를 사용하면 더 명시적이며 예외 처리가 더 예측 가능해집니다.
3. Exception 클래스
Exception 클래스는 모든 파이썬 내장 예외 클래스의 부모 클래스이며, 사용자 정의 예외 클래스를 만들 때도 일반적으로 이 클래스를 상속하여 만듭니다.이 클래스는 사용자 정의 예외를 만들거나 특정 예외 유형을 잡기 위한 기본적인 인터페이스를 제공합니다.
1. 상속: 예외 유형은 Exception을 상속받아서 정의됩니다. 예를 들면 ValueError, TypeError, FileNotFoundError 등이 있습니다. 이 상속 구조 덕분에 except Exception 블록은 Exception을 상속받은 모든 예외를 캡처할 수 있습니다.
2. 메시지: 예외가 생성될 때, 일반적으로 오류 메시지를 함께 전달할 수 있습니다. 이 메시지는 예외 객체의 args 속성을 통해 접근 가능하며, 예외를 문자열로 변환할 때(예: str(e)) 해당 메시지가 반환됩니다.
4. 사용자 정의 예외 클래스를 직접 만들고 활용하기
Error for age 17: 너무 어리다!
알아가봅시다!
Error for age 42: 원하는 나이 범위가 아님!
Error for age 19: 너무 어리다!
'파이썬' 카테고리의 다른 글
Streamlit/GPT API 이용해보기 (0) | 2023.11.22 |
---|---|
파이썬 스페셜 메소드 (0) | 2023.09.17 |
파일 입출력 라이브러리2 (0) | 2023.09.14 |
파일 입출력 라이브러리 (0) | 2023.09.14 |
super()메소드와 다중상속 (0) | 2023.09.13 |