안녕하세요!
이번 글에서는 파이썬의 에러와 예외에 대해서 알아보려고 합니다.
1) 에러란
2) Syntax Error
3) Exceptions
4) Exception Handling:
5) Raising Exceptions 예외 발생시키기
6) Exception Chaining 예외 꼬리물기(연쇄 예외)
순서로 알아보겠습니다.
1) 에러란
에러는 프로그래밍을 하다 보면 수도 없이 만나는 친구입니다.
에러란 프로그램이 제대로 돌아가지않는 상태를 의미합니다.
에러 생겼다. ==> 모종의 이유로 프로그램이 제대로 실행되지 않는다.
파이썬에서는 Systax Error(구문 오류)와 Exceptions(예외) 정도가 있다고 합니다.
Systax Error부터 알아보겠습니다.
2) Syntax Error
구문 오류(문법 오류)는 콜론을 빠뜨렸다거나 파이썬에서 제시하는 구문 규칙을 지키지 않을 경우 발생하는 에러입니다.
python reference의 예를 빌리자면
while True print('Hello world')
File "<stdin>", line 1
while True print('Hello world')
^
SyntaxError: invalid syntax
이런 식으로 파이썬이 제시하고 있는 규칙을 지키지 않을 경우 발생하고
보시면 ^로 어디에 오류가 발원지에 대한 추리까지 해줍니다.
3) Exceptions
구문이나 표현을 올바르게 작성하더라도 실행하고 나면 오류가 발생할 수 있습니다.
예를 들면 현실 세계의 관념이나 법칙에 안 맞는 경우가 있을 수 있습니다.
# 0으로 나누기
# 사용자의 나이를 입력하라고 했는데 음수를 입력하는 경우
10 * (1/0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
4 + spam*3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'spam' is not defined
'2' + 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
오류의 마지막 라인은 어떤 상황이 발생했는지를 말해줍니다
에러는 실제로 다양하며 형식은 메시지의 일부로 출력됩니다.
예제에 있는 에러는 built-in Error로 만들어져 있는 에러입니다.
4) Exception Handling:
파이썬에서는 여러 상황에서 발생하는 에러를 제어할 수 있는 예외처리를 제공하고 있습니다.
예외 처리를 사용해서 프로그램이 굳이 중단되지 않아도 되는 상황에는 스무스하게 넘어갈 수 있습니다.
예외 처리에 대하여 작성해 놓은 포스팅이 있습니다.
참고해 주세요
[python] 파이썬 예외처리 (Exception Handling)
안녕하세요! 이번 글에서는 파이썬의 예외 처리(Exception Handling)에 대해서 알아보려고 합니다. 1) exception 2) try --- except: 3) try --- except --- else: 4) try --- except --- finally: 5) except ErrorName as e: 예외의 정
newbienew.tistory.com
5) Raising Exceptions 예외 발생시키기
age = int(input("나이를 입력해 주세요 "))
if age < 0 :
raise ValueError("나이가 어떻게 마이너스가 되는데?")
else:
print(f'{age}세 입니다.')
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
raise ValueError("나이가 어떻게 마이너스가 되는데?")
ValueError: 나이가 어떻게 마이너스가 되는데?
raise ErrorName("Message")
이런 식으로 에러를 발생시킬 수 있습니다.
예외는 예외 크래스의 하위클래스 거나 BaseException에서 파생되는 클래스여야 합니다.
예외 클래스가 전달되면 인수 없이 생성자를 호출하여 암묵적으로 인스턴스처럼 됩니다.
6) Exception Chaining 예외 꼬리물기(연쇄 예외)
한 try: except: 블록을 실행하는 과정에서 내가 제어하고자 하는 에러가 아닌 다른 에러가 발생하는 경우에는
다른 에러로 인해 프로그램이 종료되고 오류메시지에 출력되는 현상이 발생활 겁니다.
이 예외가 다른 행동의 직접적인 결과임을 나타내기 위해서 raise문은 선택적으로 from 절을 허용한다고 합니다.
try:
open("database.sqlite")
except OSError:
raise RuntimeError("unable to handle error")
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'database.sqlite'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
RuntimeError: unable to handle error
보시면 open을 하는 도중 파일이 없으니 FileNotFOundError가 발생합니다.
그러나 except 안에는 OSError만 핸들링하도록 되어 있기에
FileNotFOundError Message만 뜨는 것이 맞는데..
RuntimeError까지 같이 발생을 합니다..
이 부분이 이해가 안 가네요
추후에 수정하도록 하겠습니다.
연쇄적으로 발생하는 에러에 대한 메시지를 자동으로 표시해 줍니다.
# exc must be exception instance or None.
#
raise RuntimeError from exc
이런 식으로 사용하는데 예외를 변환할 때 유용하다고 합니다.
아래는 그 예시입니다.
def func():
raise ConnectionError
try:
func()
except ConnectionError as exc:
raise RuntimeError('Failed to open database') from exc
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in func
ConnectionError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
RuntimeError: Failed to open database
func 은 ConnectionError를 발생시킵니다.
Except 발생하면 exc라는 Exception의 하위 인스턴스를 생성합니다.
실행 시 ConnectionError가 발생하여 exc 생성되고 RuntimeError까지 발생합니다.
ConnectionError -> RuntimeError 순으로 발생이 됩니다.
위에 text에는 직접적으로 연관이 있다고 말해주고 있네요
또한 From에 None을 사용하여 비활성화할 수 있습니다.
try:
open('database.sqlite')
except OSError:
raise RuntimeError from None
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
RuntimeError
1) 에러란
에러란 프로그램이 모종의 이유로 동작을 멈춘 상태(매끄럽지 않게 실행되는 상태)를 의미한다.
어쨌거나 정상적으로 동작하지 않을 이유가 발생했다는 말이다.
2) Syntax Error
파이썬에서 제시하고 있는 문법에 맞게 작성을 안 하면 발생하는 에러입니다.
오타 잘 봅시다
3) Exceptions
파이썬에서 제공하고 있는 여러 가지 Built-in Exceptions들이 있습니다.
직접적인 오류는 아니지만 프로그램이 시작되면서 발생할 수 있습니다.
4) Exception Handling:
예를 들면 사용자의 나이를 입력받는데 마이너스를 입력했다던가 하는 이유 말입니다.
이럴 때는 다시 입력하라고 handling 할 수 있습니다.(try - except)
4) Exception Handling:
5) Raising Exceptions 예외 발생시키기
raise ErrorName("Message") 이런 식으로 사용합니다.
6) Exception Chaining 예외 꼬리물기(연쇄 예외)
연쇄적으로 발생하는 에러에 대한 표시방법을 제시하고 있는 part였습니다.
from (ExceptionInstance or None)
연쇄적으로 발생하는 에러에 대한 메시지를 자동으로 표시해 줍니다.
'파이썬 > 사용법' 카테고리의 다른 글
[python] 파이썬 에러 커스텀하기 (3) | 2025.07.31 |
---|---|
[python] 파이썬 함수(Function) 정리 (1) | 2025.07.30 |
[python] 파이썬 예외처리 (Exception Handling) (0) | 2025.07.29 |
[python] 파이썬 모듈, 패키지, 임포트 총 정리 (2) | 2025.07.29 |
[python] 파이썬 리스트 for문 사용법 4가지 총 정리 (2) | 2025.07.29 |