面向对象 - 异常处理 - 总结

面向对象 - 异常处理:
1.什么是异常:异常是错误发生的信号,一旦程序出错,并且程序没有处理这个错误,那就会抛出异常,并且程序的运行随之终止

2.错误分为两种:
2.1.语法错误 程序执行前就要立刻改正过来
2.2.逻辑错误:
1.ValueError int('aaa')
2.NameError name
3.IndexError l=[1,2,3] l[100]
4.KeyError d={} d['name']
5.AttributeError class Foo:pass Foo.xxx
6.ZeroDivisionError 1/0
7.TypeError for i in 3:pass
3.异常的种类:
在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,一个异常标识一种错误
常见异常:
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
更多异常:
......
4.异常处理 ---》 (不能让程序出错一点异常 就整个崩溃 需要检测异常 )
1.对于错误发生的条件 如果是可以预知的 此时应该用if 判断去预防异常.
age=input('>>:').strip()
if age.isdigit(): # 发生异常是可预知的 把异常拒掉了
age=int(age)
2.对于错误发生的条件 如果是不可预知的 此时应该用异常处理机制try...except
try...except 异常已经出现了 捕捉到 可以让程序继续运行
try:
...
except StopIteration:
print('出错了')
print('--------')
5.try...except 详细用法:
1.异常类只能用来处理指定的异常情况,如果非指定异常则无法处理
2.多分支:被检测的代码块抛出的异常有多种可能性,并且我们需要针对每一种异常类型都定制专门的处理逻辑
3.万能异常:Exception 被检测的代码块抛出的异常有多种可能性,并且我们针对所有的异常类型都只用一种处理逻辑就可以了,那就使用 Exception
4.NameError/IndexError Exception 联合使用 走了NameError/IndexError 就不会在走 Exception
5.其他结构 try...except else finally #用来回收资源 else:没有发生异常时执行 finally:无论有没有异常都执行 这里一般用来回收资源f.close()
6.主动触发异常:raise 异常类型(值) eg: raise TypeError('名字必须为str')
7.自定义异常类型 ==》 类型 = 类 class MyException(BaseException):... raise MyException('自定义的异常')
8.断言assert 下面的代码 依赖上面的代码 的结果 AssertionError
9.使用异常时注意:代码不能随便乱用 try...except Exception .. 否则失去了写代码的意义
10.什么情况使用异常呢?
1.错误发生的异常能明确预知
2.错误一定会发生,无法预知它发生的条件,不能让程序奔溃掉 才采用try...except

  1 # print('1')
  2 # int('q')
  3 # asd
  4 # l=[1,2,3]
  5 # print(l[100])
  6 # d={}
  7 # print(d['name'])
  8 # class Foo:
  9 #     pass
 10 # Foo.xx
 11 # 1/0
 12 # for i in 3:
 13 #     pass
 14 # import time
 15 # time.sleep(100)
 16 # int('as')
 17 # AGE=10
 18 # age=input('>>:').strip()
 19 # if age.isdigit():
 20 #     age=int(age)
 21 #     if age>AGE:
 22 #         print('猜大了')
 23 # f=open('a.txt','r',encoding='utf-8')
 24 # # print(f.__next__())
 25 # # print(f.__next__())
 26 # # print(f.__next__())
 27 # try:
 28 #     print(next(f),end='')
 29 #     print(next(f),end='')
 30 #     print(next(f),end='')
 31 #     print(next(f),end='')
 32 # except StopIteration as e:
 33 #     print(e,'出错了')
 34 #
 35 # print('-----------')
 36 
 37 # -----------------------
 38 # try...except...用法
 39 # 1.异常类只能用来处理指定的异常情况,如果非指定异常则无法处理
 40 # s='hello'
 41 # try:
 42 #     int(s)
 43 # except ValueError as e:
 44 #     print(e)
 45 # print('---------------')
 46 # 2.多分支:被检测的代码块抛出的异常有多种可能性,
 47 # 并且我们需要针对每一种异常类型都定制专门的处理逻辑
 48 # try:
 49 #     print('--1--')
 50 #     # name
 51 #     print('--2--')
 52 #     l=[1,2,3]
 53 #     # l[100]
 54 #     print('--3--')
 55 #     d={}
 56 #     # d['name']
 57 #     print('--4--')
 58 #
 59 # except NameError as e:
 60 #     print(e)
 61 #
 62 # except IndexError as e:
 63 #     print(e)
 64 #
 65 # except KeyError as e:
 66 #     print(e)
 67 #
 68 # print('----end----')
 69 # 3.万能异常:Exception 被检测的代码块抛出的异常有多种可能性,
 70 # 并且我们针对所有的异常类型都只用一种处理逻辑就可以了,那就使用 Exception
 71 # try:
 72 #     print('--1--')
 73 #     # name
 74 #     print('--2--')
 75 #     l=[1,2,3]
 76 #     l[100]
 77 #     print('--3--')
 78 #     d={}
 79 #     # d['name']
 80 #     print('--4--')
 81 # except Exception as e:
 82 #     print(e)
 83 # print('----end---')
 84 # 4.NameError/IndexError  Exception 联合使用
 85 # try:
 86 #     print('--1--')
 87 #     # name
 88 #     print('--2--')
 89 #     l=[1,2,3]
 90 #     l[100]
 91 #     print('--3--')
 92 #     d={}
 93 #     # d['name']
 94 #     print('--4--')
 95 # except NameError as e:
 96 #     print(e)
 97 # except IndexError as e:
 98 #     print(e)
 99 # except Exception as e:
100 #     print('统一的处理方式',e)
101 # print('----end---')
102 # 5.其他结构 try...except  else  finally #用来回收资源
103 # try:
104 #     print('--1--')
105 #     # name
106 #     print('--2--')
107 #     l=[1,2,3]
108 #     # l[100]
109 #     print('--3--')
110 #     d={}
111 #     # d['name']
112 #     print('--4--')
113 # except NameError as e:
114 #     print(e)
115 # except IndexError as e:
116 #     print(e)
117 # except Exception as e:
118 #     print('统一的处理方式',e)
119 # else:
120 #     print('没有发生异常时执行')
121 # finally:
122 #     print('无论有没有异常 都执行')
123 #
124 # print('----end---')
125 
126 # try:
127 #     f=open('a.txt','r',encoding='utf-8')
128 #     print(next(f),end='')
129 #     print(next(f), end='')
130 #     print(next(f), end='')
131 #     print(next(f), end='')
132 #     print(next(f), end='')
133 # except Exception as e:
134 #     print('统一处理',e)
135 # finally:
136 #     f.close()  # 用来回收资源 表示回收的系统资源 f py会自动回收 os的资源需要f.close()
137 # print(f.name)
138 # 6.主动触发异常:raise  异常类型(值)
139 # class People:
140 #     def __init__(self,name,age):
141 #         if not isinstance(name,str):
142 #             raise TypeError('名字必须为str')
143 #         if not isinstance(age,int):
144 #             raise TypeError('年龄必须为int')
145 #         self.name=name
146 #         self.age=age
147 #
148 # p1=People('alice','12')
149 # print(p1.name,p1.age)
150 # 7.自定义异常类型 ==》 类型 = 类
151 # class MyException(BaseException):
152 #     def __init__(self,msg):
153 #         super().__init__()
154 #         self.msg=msg
155 #
156 #     def __str__(self):
157 #         return '<%s>'%self.msg
158 #
159 # raise MyException('自定义的异常')
160 # obj=MyException('自定义的异常')
161 # print(obj)
162 # 8.断言assert  下面的代码 依赖上面的代码 的结果
163 # info={}
164 # info['name']='alice'
165 # # info['age']=18
166 #
167 # # if 'name' not in info:
168 # #     raise KeyError('必须有name这个key')
169 # # if 'age' not in info:
170 # #     raise KeyError('必须有age这个key')
171 #
172 # assert ('name' in info) and ('age' in info)
173 #
174 # if info['name']=='alice' and info['age']>10:
175 #     print('welcome')
异常处理

 


posted @ 2018-03-12 20:29  Alice的小屋  阅读(470)  评论(0编辑  收藏  举报