In [1]:
open('no_such_file')
In [3]:
5/0
In [4]:
[1,2][3]
In [5]:
'hello'.append('world')
In [8]:
try:
open('no_such_file')
except IOError:
print('그런 파일 없음')
In [6]:
try:
5/0
except IOError:
print('... 파일 여는 거랑 무슨 상관?')
In [9]:
try:
5/0
except:
print('다 잡아줄게')
In [14]:
filename = 'hello_world.txt'
try:
f = open(filename)
except IOError as ex:
print(ex)
else:
# try가 성공했을 때만 실행
f.close()
print('파일 열기 성공')
In [17]:
filename = 'no_such_file.txt'
try:
f = open(filename)
except IOError as ex:
print(ex)
else:
print('파일 열기 성공')
f.close()
finally:
# try가 성공하든 실패하든 무조건 실행된다
print('파일명: {}'.format(filename))
In [18]:
def get_lines(filename):
try:
f = open(filename)
except IOError as e:
raise # 발생한 예외를 위쪽(호출자)으로 전달
return f.readlines()
filename = 'no_such_file.txt'
try:
lines = get_lines(filename)
except IOError:
print('그런 파일 없음: {}'.format(filename))
발생할 수 있는 예외가 여러 개인 경우
In [4]:
def safe_divide(a,b):
try:
result = a/b
except ArithmeticError:
print('수학 공부해야겠는데 ...')
raise
except TypeError as ex:
print('숫자가 아닌 것으로 나눌 수 없습니다.')
raise
return result
In [8]:
safe_divide(3,2)
Out[8]:
In [6]:
safe_divide(5,0)
In [5]:
safe_divide(5,'a')
여러 개의 예외를 한번에 처리하기
In [9]:
def safe_divide(a,b):
try:
result = a/b
except (ArithmeticError, TypeError) as e:
print('나누기 오류!')
raise
else:
return result
In [10]:
safe_divide(5,0)
예외 처리의 우선순위
In [26]:
def safe_divide(a,b):
try:
result = a/b
except ZeroDivisionError:
print('0으로 나눌 수 없습니다.')
except ArithmeticError:
print('수학 공부해야겠는데 ...')
else:
return result
In [27]:
safe_divide(5,0)
예외를 수동으로 발생시키기
In [28]:
raise ValueError
In [31]:
raise ArithmeticError
In [ ]: