-
Notifications
You must be signed in to change notification settings - Fork 0
/
chapter07_01.py
139 lines (109 loc) · 2.9 KB
/
chapter07_01.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# Chapter07-1
# 파이썬 예외처리의 이해
# 예외 종류
# SyntaxError, TypeError, NameError, IndexError, ValueError, KeyError....
# 문법적으로는 예외가 없지만, 코드 실행 프로세스(단계)발생하는 예외도 중요
# 1. 예외는 반드시 처리
# 2. 로그는 반드시 남긴다.
# 3. 예외는 던져진다.
# 4. 예외 무시 --> 좋은 방법은 아니다!
# SyntaxError : 문법 오류
# print('error)
# print('error'))
# if True
# pass
# NameError : 참조 없음
# a = 10
# b = 15
# print(c)
# ZeroDivisionError
# print(100 / 0)
# IndexError
# x = [50, 70, 90]
# print(x[1])
# print(x[4])
# print(x.pop())
# print(x.pop())
# print(x.pop())
# print(x.pop()) --> 마지막은 빈 리스트이기 때문 출력하면 예외가 발생
# KeyError --> dictionary에서 나오는 에러
# dic = {'name': 'Lee', 'Age': 41, 'City': 'Busan'}
# print(dic['hobby'])
# print(dic.get('hobby')) --> get method를 쓰는게 좀 더 안전하다
# get method는 예외를 발생시키지 않고 없으면 None을 가져오기 때문 (dictionary에서 배운 내용!)
# 예외 없는 것을 가정하고 프로그램 작성 -> 런타임 예외 발생 시 예외 처리 권장(EAFP)
# AttributeError : 모듈, 클래스에 있는 잘못된 속성 사용 예외
import time
# print(time.time2())
# ValueError
# x = [10, 50, 90]
# x.remove(50)
# print(x)
# x.remove(200)
# ValueError
# x = [10, 50, 90]
# x.remove(50)
# print(x)
# x.remove(200)
# TypeError : 자료형에 맞지 않는 연산을 수행 할 경우
# x = [1,2]
# y = (1,2)
# z = 'test'
# print(x + y)
# print(x + z)
# print(y + z)
# print(x + list(y))
# print(x + list(z))
# 예외 처리 기본
# try : 에러가 발생 할 가능성이 있는 코드 실행
# except 에러명1: 여러개 가능
# except 에러명2:
# else : try 블록의 에러가 없을 경우 실행
# finally : 항상 실행
name = ['Kim', 'Lee', 'Park']
# 예제1
# 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.')
print()
# 예제2
# 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.')
print()
# 예제3
# 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')
print()
# 예제4
# 예외 발생 : raise
# raise 키워드로 예외 직접 발생
# try:
# a = 'Park'
# if a == 'Park':
# print('OK! Pass!')
# else:
# raise ValueError
# except ValueError:
# print('Occurred! Exception!')
# else:
# print('Ok! else!')