728x90
파이썬의 예외는 대표적으로 구문적오류, 실행 오류, 의미적오류가 있다.
구문적 오류(Syntax Error)
- 문법 오류에 의하여 기계어 변환 과정에서 발생하는 오류
- 우리가 코딩을 하면서 가장 많이 보는 오류이다.
실행 오류(Runtime Error)
- 프로그램 실행 중 발생하여 프로그램이 비정상적으로 종료되는 오류
예시
def do_func(text):
return int(text)
text = "3"
do_func(text)
text = "3.0"
do_func(text)
=> ---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-4-7ac4698e8a41> in <module>()
1 text = "3.0"
----> 2 do_func(text)
<ipython-input-2-6568bb3cdae9> in do_func(text)
1 def do_func(text):
----> 2 return int(text)
3 text = "3"
4 do_func(text)
ValueError: invalid literal for int() with base 10: '3.0'
의미적 오류(Semantic Error)
- 문법은 정상이지만 실행의 결과가 원하는대로 나오지 않는 오류
- 오류가 대부분 개념이 부족한 상태에서 나타나기 때문에 해결하기 어렵다.
예시
a = (2)
b = (2,)
a == b
이 외의 오류
IndexError
- 리스트의 인덱스 범위를 넘어갈 때 발생한다.
예시
a = [1,2,3]
a[5]
=> ---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-25-4a30d506aea3> in <module>()
1 a = [1,2,3]
----> 2 a[5]
IndexError: list index out of range
NameError
- 정의되지 않은 변수를 사용하려 할 때
예시
karns
=> ---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-26-abc70f1e7fd0> in <module>()
----> 1 karns
NameError: name 'karns' is not defined
ValueError
- 변환할 수 없는 자료형 변환을 시도할 때
예시
a = "손용석"
int(a)
=> ---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-27-5fd6ca0c2eeb> in <module>()
1 a = "손용석"
----> 2 int(a)
ValueError: invalid literal for int() with base 10: '손용석'
TypeError
- 자료형이 맞지 않는 연산을 시도할 때
- 호출할 수 없는 객체를 함수처럼 호출할 때
예시
20 / "용석"
=> ---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-28-7912ca9486b6> in <module>()
----> 1 20 / "용석"
TypeError: unsupported operand type(s) for /: 'int' and 'str'
FileNotFoundError
- 없는 파일을 읽어드리려 할 때
예시
open("text.txt")
=> ---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-31-8b2bb8f17573> in <module>()
----> 1 open("text.txt")
FileNotFoundError: [Errno 2] No such file or directory: 'text.txt'
AttributeError
- 객체의 없는 속성을 사용하려 할 때
예시
class MyClass:
def do_func(self):
self.a = self.a +2
mc = MyClass()
mc.do_func()
=> ---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-33-f978a234de23> in <module>()
4
5 mc = MyClass()
----> 6 mc.do_func()
<ipython-input-33-f978a234de23> in do_func(self)
1 class MyClass:
2 def do_func(self):
----> 3 self.a = self.a +2
4
5 mc = MyClass()
AttributeError: 'MyClass' object has no attribute 'a'
예외처리
- 프로그램 개발하면서 예상치 못한 상황 발생 시 처리
- 입출력 오류와 같은 상황 발생 시 프로그램 종료를 방지하기 위함
- 개발자가 예외 발생 가능한 부분을 어떻게 대응하라고 지정해줄 수 있다.
예시
try:
예외 발생 가능성이 있는 실행 코드
except:
예외 발생 시 실행 코드
else:
예외 발생하지 않았을 경우 실행 코드
finally:
예외 발생 여부와 상관없이 항상 실행할 코드
적용 예시
다음과 같이 에러가 발생할 시 문구를 넣을 수 있다. 또한 에러를 지정해서 메세지를 볼 수 있다.
lst = ["3","5","3.","3.0","10"]
num_list = []
for i in lst:
try:
num = int(i)
except ValueError as e:
print("정수형으로 변환되지 않습니다. 실수형으로 변환 후에 시도하겠습니다.")
num_list.append(int(float(i)))
else:
print("정상적으로 정수형으로 변경합니다.")
finally:
num_list.append(num)
print("정수형으로 변환 및 저장완료")
num_list
=> 정상적으로 정수형으로 변경합니다.
정수형으로 변환 및 저장완료
정상적으로 정수형으로 변경합니다.
정수형으로 변환 및 저장완료
정수형으로 변환되지 않습니다. 실수형으로 변환 후에 시도하겠습니다.
정수형으로 변환 및 저장완료
정수형으로 변환되지 않습니다. 실수형으로 변환 후에 시도하겠습니다.
정수형으로 변환 및 저장완료
정상적으로 정수형으로 변경합니다.
정수형으로 변환 및 저장완료
[3, 5, 3, 5, 3, 5, 10]
raise 문
- 필요할 때 에러를 발생시키는 코드
- if문과 함께 많이 사용된다.
예시
num = 0
if num == 0:
raise ValueError("0으로 나눌 수 없어요.")
=> ---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-68-3b5a3a90e83c> in <module>()
1 num = 0
2 if num == 0:
----> 3 raise ValueError("0으로 나눌 수 없어요.")
ValueError: 0으로 나눌 수 없어요.
assert 문
- 조건이 거짓일 경우 오류를 발생시킴
예시
def sol(n1,n2): # 개발 단계에서 사용!
assert n2 > 0, "1 이상의 정수만 입력하세요."
return int(n1/n2)
sol(1,-1)
=> ---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-83-a8a716634e95> in <module>()
2 assert n2 > 0, "1 이상의 정수만 입력하세요."
3 return int(n1/n2)
----> 4 sol(1,-1)
<ipython-input-83-a8a716634e95> in sol(n1, n2)
1 def sol(n1,n2):
----> 2 assert n2 > 0, "1 이상의 정수만 입력하세요."
3 return int(n1/n2)
4 sol(1,-1)
AssertionError: 1 이상의 정수만 입력하세요.
728x90
'AI 공부 > 파이썬' 카테고리의 다른 글
파이썬 (iterable & iterator와 Generator) (0) | 2022.08.09 |
---|---|
파이썬 (collections, defaultdict, OrdereDdict 모듈) (0) | 2022.08.08 |
파이썬 (모듈과 패키지, sys, os, random 모듈) (0) | 2022.08.08 |
파이썬 (50 문제 풀고, 부족한 개념 정리) (0) | 2022.08.06 |
파이썬 (클래스 - 2 ) 상속 클래스, 오버라이딩, private, 매직 메소드, getter&setter (0) | 2022.08.04 |
댓글