코딩하면서 오류는 반가운 친구입니다.
(이렇게 쓰니까 뭔가 있어보이네요)
- 블로그 주인 -
왜냐하면 오류를 보면 제가 틀린 부분을 잘 알 수 있거든요.
(하지만 안 보고 싶어요. 그래서 코딩하는 사람들은 외향인이 많나봐요... 저 포함)
java를 하다가 python을 하니까 느낀 점이
오류를 알려주는 게 너무 친절해서 좋았어요.
java가 외강내강인 으르르릉 치와와 같은 느낌이면
python은 외약내약(?)인 온순한 푸들 같은 느낌이죠
- 블로그 주인 -
하여튼 오류는 아래의 사진과 같이 구성되어 있어요.
왜 이 사진들을 알아야 하냐고 물으실 수 있는데
오류에 대해 알아보고 그 이유를 알려드릴게요.
오류 종류
1. ValueError
부적절한 값을 인자로 받은 경우
int('abc') # <---- Value error
lst = ['a', 'b', 'c']
lst.index('z') # <---- Value error
2. IndexError
인덱스 범위를 벗어나는 경우. (길이를 아는 함수는? len()을 사용하여 오류를 해결할 수 있어요.)
lst = [1,2,3,4,5]
lst[10] # <--- lst의 인덱스 범위는 4까지
tup = tuple(['a','b','c'])
tup[5] # <--- tup의 인덱스 범위는 2까지
3. SyntaxError
파이썬 문법오류가 발생하는 경우. 이 경우 찾기 쉬워요.
a = 1
if a ==2
# : 가 빠졌죠?
print('1111')
fi a == 2:
# fi -> if
print('1111')
4. NameError
변수 이름을 찾을 수 없는 경우. 주로 대문자 소문자, 오타 등으로 자주 발생해요.
if tt == 1:
print('1111')
5. ZeroDivisionError
0으로 나누려는 경우
10 / 0
6.FileNotFoundError
해당 파일이나 디렉터리가 없는 경우
open('test.py', 'r')
7. TypeError
잘못된 타입 전달
1 + '11'
8. AttributeError
Attribute(속성)을 참조 또는 대입이 실패한 경우
lst = [1,2,3,4,5]
lst.appe(1) # appe라는 속성은 없어요
9. KeyError
딕셔너리에서 접근하려는 키 값이 없는 경우
dic = {'a' : 1, 'b' : 2, 'c' : 3}
dic['z']
예외처리
○ try/except 구조
try:
# 로직, 기능
except <오류종류>:
# try문에서 Exception(오류)가 발생할 때, 실행됨
○ 예시
try:
x = int('11')
print(x)
except ValueError as e:
print(f'오류 메세지: {e}')
# 결과 11
try:
x = int('abc')
print(x)
except ValueError as e:
print(f'오류 메세지 : {e}')
# 결과 오류메세지 : invalid literal for int() with base 10 : 'abc'
else/finally
○ 구조
try:
# 로직, 기능
except <오류종류>:
# try문에서 오류가 발생할 때, 실행
else:
# try문이 성공할 때 발생
finally:
# try문 결과에 상관없이 실행
○ 예시
try:
x = 11+ int('22')
print(x)
except:
print('except ~~')
try:
x = 11+ int('22')
print(x)
except:
print('except ~~')
finally:
print('finally ~~')
try:
x = 11+ int('22')
print(x)
except:
print('except ~~')
else:
print('else ~~')
finally:
print('finally ~~')
try:
x = 11+ int('abc')
print(x)
except:
print('except ~~')
else:
print('else ~~')
finally:
print('finally ~~')
아까 설명했던 오류 종류의 구조를 어느 정도 알아야 하는 이유?
예외를 아래의 코드와 같이 여러개 적어줄 수 있어요. 하지만 AttributeError보다 상위에 있는 Execption을 위에 적어주면
아래의 'AE'는 출력이 되지 않아요. 순서를 바꿔주면 AttributeError가 발생하면 'AE'가 출력이 가능해요
try:
lst = [1,2,3,4,5]
lst.appe('z')
except Exception as e:
print('Exception')
except AttributeError as Ae:
print('AE')
앞에 포스팅이 너무 길어서 따로 포스팅 했네요. 다음 번에 또 봐요!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/002.gif)
'Networks > Python' 카테고리의 다른 글
SK networks AI Camp - Python 내장 함수 (0) | 2024.07.15 |
---|---|
SK networks AI Camp - Python(함수) (2) | 2024.07.15 |
SK networks AI Camp - Python을 활용한 구매 기능 (2) | 2024.07.13 |
SK networks AI Camp - Python 기본(3)_제어문 (0) | 2024.07.12 |
SK networks AI Camp - Python 기본(2)_자료구조 (0) | 2024.07.11 |