Inflearn <프로그래밍 시작하기: 파이썬 입문 강의> 내용임을 밝힙니다.
에러를 예외처리하는 것큼이나 코드 실행 프로세스에서 예상과 다르게 돌아가는 예외를 처리하는 방법도 필요하므로, raise 키워드로 예외를 발생시키기도 한다.
에러가 발생해 프로그램이 멈추지 않게 하기 위해,
1. 예외는 반드시 처리되어야 하고,
2. 그에 대한 로그가 남아야 하며,
3. 예상하지 못한 프로세스에 관해 예외를 발생시키기도 한다.
4. Python에서는 예외가 없는 것을 가정하고 프로그램을 작성 후, 런타임에서 예외가 발생 시 예외 처리하는 것을 권장한다.
x = [1,2]
y = (1,2)
print(x + y) # TypeError: can only concatenate list (not "tuple") to list
x = [50, 70, 90]
print(x.pop())
print(x.pop())
print(x.pop())
print(x.pop()) # IndexError: pop from empty list
dic = {'name': 'Lee', 'Age': 41, 'City': 'Busan'}
print(dic['hobby']) # KeyError: 'hobby'
print(dic.get('hobby')) # dictionary에서 get을 쓰는 것이 권장됨->KeyError 대신 'None'을 출력하므로.
x = [10, 50, 90]
x.remove(200) # ValueError: list.remove(x): x not in list
import time
print(time.time2()) # AttributeError: module 'time' has no attribute 'time2'. Did you mean: 'time'?
try : 에러가 발생 할 가능성이 있는 코드 실행
except 에러명1: 여러개 가능
except 에러명2:
else : try 블록의 에러가 없을 경우 실행
finally : 항상 실행
name = ['Kim', 'Lee', 'Park']
try:
z = 'Kim' # 'Cho'
x = name.index(z)
print('{} Found it! {} in name'.format(z, x + 1))
except ValueError:
print('Not found it! - Occurred ValueError!')
else:
print('Ok! else.')
name = ['Kim', 'Lee', 'Park']
try:
z = 'Cho' # 'Cho'
x = name.index(z)
print('{} Found it! {} in name'.format(z, x + 1))
except:
print('Not found it! - Occurred ValueError!')
else:
print('Ok! else.')
name = ['Kim', 'Lee', 'Park']
try:
z = 'Cho' # 'Cho'
x = name.index(z)
print('{} Found it! {} in name'.format(z, x + 1))
except Exception as e:
print(e) # 어떤 에러 발생했는지 로그 남기기
print('Not found it! - Occurred ValueError!')
else:
print('Ok! else.')
finally:
print('Ok! finally')
try:
a = 'Park'
if a == 'Park':
print('OK! Pass!')
else: # 프로그램 목적상 'Park'이 아니면 문제가 발생한다면 에러로 처리할 수 있다
raise ValueError
except ValueError:
print('Occurred! Exception!')
else:
print('Ok! else!')