Python Basic - 파이썬 에러 및 예외 - 예외처리(1)
이번 포스팅은 파이썬 에러 및 예외처리에 관한 내용입니다.
예외는 에러를 뜻하기도 합니다. 완벽한 프로그램이라는 것은 없기 때문에.... 하하
실수들 때문에 에러나 버그가 나기도 합니다. 특히, 결제나 수십명이 이용하는 어플리케이션이 있다고 하면, 한번의 에러나 버그가 큰 손실을 일으키기도 합니다.
하드웨어에서도 에러가 날 수 도 있고, 프로그램 상에서 에러의 발생이 날 수 있습니다.
이 때, 에러의 순간에 코드로 프로그램을 컨트롤 하거나 개선 해 나아가는 것을 예외처리라고 합니다.
앞으로의 포스팅은 다양한 Exceptions들을 알아보도록 하겠습니다.
다양한 Exceptions - 파이썬 예외종류와 예
SyntaxError : 잘못된 문법
# SytanxError - 잘못된 문법
print('Test) # print문 내의 콜론을 연 후에 닫지 않았을 경우
if True # if 문 진행 시 ':' (콜론) 을 붙이지 않은 경우
print('Hi')
x => y # 말도안되는 파이썬에 없는 문법
위의 예제코드를 실행 시키면, SyntaxError가 결과 창에 나오게 됩니다.
NameError : 참조변수가 없음
# NameError
a = 10
b = 15
print(c)
a와 b를 선언하고 초기화 했지만, 출력은 선언되지 않은 c를 했습니다.
컴퓨터는 당연히 모를수밖에 없죠..? NameError를 발생시킵니다.
ZeroDivisionError : 0으로 나누기 에러
#ZeroDivisionError : 0으로 나누기 에러
print(30/0)
무엇이든 0으로 나눈다면 나누어지지 않겠죠~? 해당하는 에러가 발생 했을 때 나타나는 에러입니다.
IndexError : 인덱스 범위를 초과하거나 미달한 경우입니다.
#IndexError : 인덱스 범위 오류
x = [10,20,30]
print(x[0]) #정상
print(x[4]) # IndexError
리스트를 출력 할 때에 범위를 넘어가게된다면, 출력을 할 수 없습니다.
KeyError : 주로 Dictionary 형에서 발생하는 오류.
# KeyError
dic = {'name' : 'woolbro' , 'Age' : 100 , 'City' : 'Bundang' }
print(dic['hobby']) # 없는 키를 사용...
print(dic.get('hobby')) # get 메소드로, dictionary 내부에 키의 여부를 검사
Dictionary 내부에 존재하지 않는 키를 사용해 값을 출력 할 때 나타나는 현상이다.
이 에러를 피하기 위해서, dictionary 자료형의 get 메소드를 사용하면, 내부에 키가 존재하는지에 대한 여부를 검사한다.
AttributeError : 모듈, 클래스에 있는 잘못된 속성 사용시에 발생하는 오류
#AttributeError : 모듈, 클래스에 있는 잘못된 속성 사용
import time
print(time.time())
print(time.month()) ## 에러 발생...!!!
위의 예에서는 time 모듈 내에 존재하지 않는 month()를 사용 했기 때문에 AttributeError가 발생합니다. 자주 발생하는 에러 중 하나입니다.
ValueError : 참조 값이 없을 때 발생하는 에러
# ValueError : 참조 값이 없을 때 발생
x = [1, 5, 10]
x.remove(100) ## x에는 100이라는 값이 존재하지 않습니다.....
위의 경우에는 존재하지 않는 100이라는 값을 지우려고 하다가 발생한 에러네요 :)
지우는 예만 있지만, 이 외에도 index에서도 발생하는 예 입니다.
FileNotFoundError : 경로에 파일이 존재하지 않을때. 주로 파일을 오픈 해야 할 경우 나타나는 에러
# FileNotFoundError : 파일이 없을 때
f = open('wooldev.txt','r') # 예외 발생 .... wooldev.txt가 없기 때문에
현재 경로에서 wooldev.txt 라는 파일을 'r' 할때! 즉, 읽으려고 할 때에는 파일이 무조건 존재해야 합니다. 위의 경우 파일이 없어서 예외가 발생하는 경우입니다.
TypeError : 연산 및 프로그래밍의 흐름에서, 사용되는 Type이 부적절 할 경우 일어나는 에러
#TypeError : Type이 맞지 않을 경우
x = [1,2,3,4]
y = {1,2,3,4,5}
z = 'test wool String'
print(x+y) # x와 y의 자료형이 다르다... tuple과 list의 연산...
print(x+z) # 문자열과 리스트는 결합 할 수 없다.....
print(x+list(y)) # 형변환을 사용해 위의 오류를 해결....
위의 예를 잘 보면, 연산할 때 오류가 나는 형태를 볼 수있습니다..... TypeError는 TypeCasting으로 해결도 가능합니다 :)
코드를 짤 때에, 항상 예외가 발생하지 않을 것으로 가정하고 먼저 코딩을 하고, 실행 할 경우 예외가 발생 할 때에 처리를 해 주는 것 (예외 처리 코딩) 을 권장한다고 하네요.... (EAFP 코딩 스타일...인데 세계 개발자들이 따르는 코딩 스타일 협약이라고 합니다...