카테고리 없음

[패캠 네카라쿠배 2기] 2차 테스트 4일차 10. 파이썬 에러 및 예외

닉네임이 멋이 중헌디 2021. 6. 17. 19:03

10. 파이썬 에러 및 예외 

(1) 예외 처리 

예외 = 에러 

아무리 많은 사람들이 협업을 했다고 하더라도 완벽한 프로그래밍은 있을 수 없다 

예상 못한 에러가 있을 수도 있고 잘못된 형변환 등으로 인해 오류 발생 가능 

ex. 결제를 하고 있는데 에러가 있으면 피해가 막심하다 

 

하드웨어에서도 뜬금 없는 오류가 나타날 수 있기 때문에

 

예외(에러)의 종류 

#Section 10 

#파이썬 예외 처리의 이해 

#예외 종류 

#문법적으로 에러가 없지만, 코드 실행(런타임) 프로세스에서 발생하는 예외 처리도 중요 

#linter: 코드 스타일을 알려주고 문법 체크를 해준다

1) SyntaxError : 잘못된 문법  (문법적 에러)

print('Test) // 'Test'에서 뒤 따옴표가 안 들어감

if True // :이 없음 

 

2)NameError : 참조변수 없음 

a = 10 

b = 15

print(c)// c에 해당하는 값이 없음 

 

3)ZeroDivisionError: 0 나누기 에러 (런타임 에러, rise에러) // 실행중에 잘 되던게 안되는 것이 런타임  

print(10/0) 

 

4)IndexError: 인덱스 범위 오버 

x = [10,20,30]

print(x[3])// 3번째가 없으니까 예외 발생 

 

5)KeyError

dic = {'name' : 'Kim', 'Age':33, 'City':'Seoul'}

print(dic['hobby'])// 이런 키가 없으니까 error

print(dic.get('hobby')) //  get으로 가져오면 none으로 나온다 

 

6)AttributeError: 모듈, 클래스에 있는 잘못된 속성 사용시에 예 

import time

print(time.time())

print(time.month()) // month라는 attribute가 없다 

 

7)valueError: 참조값이 없을 대 발생 

x = [1,5,9]

x.remove(10) // not in list

x.index(10) // not in list 

 

8)FileNotFoundError

f = open('test.txt', 'r') // 해당 파일이 없으면 에러 발생 

 

9)TypeError 

x = [1,2]

y = (1,2)

z = 'test'

print(x+y) #예외 

print(x+z) 

 

print(x+list(y)) #형변환을 해야 

 

# 항상 예외가 발생하지 않을 것으로 가정하고 먼저 코딩

# 그 후 런타임 예외 발생 시 예외 처리 코딩 권장(EAFP 코딩 스타일) 

 

# 예외 처리 기본 

# try : 에러가 발생할 가능성이 있는 코드 실행 [예외 코드] 

# except: 에러명1 [예외 처리]

# except: 에러명2

// error가 일어났을 때 대비

# else: 에러가 발생하지 않았을 경우 실행 (for, if문에도 있지만 try, except문에도 있다) [정상일 때 else]

# finally: 항상 실행되는 부분 [정상, 비정상이든 말든 실행]

 

#예제1 

name = ['Kim', 'Lee', 'Park']

 

try: 

  z = 'Kim' #Cho하면 예외 발생 - except 실행

  x = name.index(z)

  print('{} Found it! in name'. format(z, x+1))

except ValueError:  # 만약 어떤 에러가 발생할지 모르겠으면 그냥 Except: print(Occurred Error!)

  print('Not found it! - Occurred ValueError!') 

// try에서 에러가 나면 except가 실행되게 된다

else: 

  print('Ok! else!')

//try문이 정상적으로 실행되었을 때만 (즉 에러가 없을 때만 ex. Kim일 때는 실행, Cho일 때는 실행X) else문이 나온다

finally: 

 print('finally ok!') 

// 예외가 발생하든 않든 반드시 실행된다 

 

#예제4 

#예외 처리는 하지 않지만(except는 없지만) , 무조건 수행되는 코딩 패턴 

try: 

 print('Try') 

finally: 

 print('Ok Finally!')

 

#예제5 

예외를 여러가지 잡을 수 있다

try:

  z = 'Kim' 

  x = name.index(z)

  print('{} Found it! in name'. format(z, x+1))

except ValueError as m:  

  print(m)// alias - 발생한 에러를 있는 그대로 출력하도록 함

except IndexError: 

  print('Not found it! - Occurred ValueError!') 

except Exception: // 나머지 에러들을 모두 잡는 곳 그러므로 순서를 마지막에 배치해야 한다

  print('Not found it! - Occurred ValueError!') 

else: 

  print('Ok! else!')

finally: 

 print('finally ok!') 

 

#예제6 

#예외 발생 : raise 

# raise 키워드로 예외 직접 발생 

 

try: 

 a = 'Kim'

 if a == 'Kim': 

   print ('Ok 허가!')

 else:  

  raise ValueError // rise키(나중에 공부), 이렇게 에러를 직접 정해놓을 수 있음

except ValueError: 

  print('문제 발생!') 

except Exception as f: 

  print(f) 

else: 

  print('Ok!')

 

 

   

 

 

 

 

 

 

    

 

문법적 에러 발생 실습 

런타임 에러 발생 실습 

try-except-else-finally