异常处理
一 异常处理
什么是异常:写的代码执行过后的报错信息,影响到其他代码执行
什么是异常处理:用try这个关键字来跳过这些异常
异常处理的好处:一断发生异常,就会停止在异常处,但是不会影响异常处理以外的代码。
异常处理的格式:
try:
处理的对象
except 异常类型
可以多个except同时使用,还可以用万能异常(Exception)
1
2
3
4
|
try : sum [ 1 , 2 , 3 , 4 ] except TypeError: print ( 22 ) |
常见异常:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
AttributeError:试图访问一个对象没有的树形 IOError:输入 / 输出的异常 ImportError:无法引用的模块和包 IndentationError:语法错误;代码没有对齐 KeyError:试图访问字典不存在的key KeyboardInterrupt:crtl + c被按下 NameError:使用没有被定义的变量 SyntaxError:非法python代码,代码不能被编译 TypeError:类型错误 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, 导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的 |
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
|
ArithmeticError AssertionError AttributeError BaseException BufferError BytesWarning DeprecationWarning EnvironmentError EOFError Exception FloatingPointError FutureWarning GeneratorExit ImportError ImportWarning IndentationError IndexError IOError KeyboardInterrupt KeyError LookupError MemoryError NameError NotImplementedError OSError OverflowError PendingDeprecationWarning ReferenceError RuntimeError RuntimeWarning StandardError StopIteration SyntaxError SyntaxWarning SystemError SystemExit TabError TypeError UnboundLocalError UnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateError UnicodeWarning UserWarning ValueError Warning ZeroDivisionError |
else语句:就是在异常处理的对象没有发现异常时才会被执行
finally语句:对错都能被执行
触发异常raise:主动的出发异常
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
异常处理
1 异常和错误,而错误分成了两种
一是语法错误,这种错误过不了解释器的检测,必须要在执行前改正
二是逻辑错误,在执行的时候检测出了错误。
2 什么是异常:异常就是程序在运行是产生的错误信息。
3 异常的种类
python3中不同的异常分为不同的类型,用不同的类型去标识。不同的类型对象错误都有相对应的标识语法。
AssertionErr: 断言语句失败;关键字后边的条件为假的时候,程序将 停止并抛出AssertionError异常,语句一般是在测试程序的时候用于在代码中置入的检查点。
AttributeError:尝试访问的未知的对象属性;尝试访问的对象属性不存在时抛出的异常。
IndexError:索引超出系列的范围;使用大的时候一般会抛出IndexError异常,原因是索引超出序列范围的类容。
KeyError:字典中查抄一个不存在的关键字;在字典中查找一个不存在的关键字时就会引发KeyError异常,因此建议使用dict.get()方法。
NameError:尝试访问一个不存在的变量;在尝试访问一个不存在的变量时,就会抛出NameError异常。 OSError:操作系统产生的异常;OSError就是操作系统产生的异常,就像打开一个不存在的文件,会引发FlieNotFoundError,而这个就是OSError的子类。导致OSError异常的有很多,所以可能更在乎错误的具体类容。可以使用as把2具体的错误信息打印出来。
SyntaxError:语法错误;如果遇到SyntaxError就是语法错误,这时候就不会继续执行代码了,应该先找到并改正错误。
TypeError:不同类间的无效的操作;有些类型不同是不能相互计算的,否则会抛出TypeError异常。
ZeroDivisionError:除数为零;除数是不能为零的,不然就会抛出ZeroDivisionError异常。
而上列不同类型的异常他们的使用方法是一样的:
try:
检测的内容
except 错误类型的语句
try-except是用来检测和处理异常的。一个try语句可以跟多个except的语句搭配,分别对相对应的异常检测处理。except后面可以跟多个异常jangle,然后对这些异常进行统一的处理。如果无法确认是哪一类的异常错误,可以使用exception万能异常来处理。然后再给用户一个看的懂的提示。
4 try—finally语句
如果出现异常,但也不得不执行收尾的工作,这就引入了用finally来扩展try。不管检测的内容有没有异常,到最后都会执行finally的收尾工作。
5 raise语句:可以使用 raise来抛出一个异常。
6 slse语句
不仅可以和if使用,还可以和循环语句使用,不止这样,在这里,还可以和try语句搭配使用。
else语句和try搭配使用,实现的功能和循环语句的差不多,只有try语句没用出现异常,就不执行else语句以及里面的内容。
7 with语句
有的人觉得打开文件又要关闭文件,还要关注异常处理,觉得很麻烦,所以python提供了一个with语句,利用这语句抽象出文件操作中频繁使用的try/exce/finally相关的细节,对文件操作使用with语句,将会减少大量的代码量,而且还不用担心文件打开却忘记关闭的问题。
总结,try提高了代码的可读性,提高了代码的执行效率。