异常处理
一 异常处理
什么是异常:写的代码执行过后的报错信息,影响到其他代码执行
什么是异常处理:用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:试图访问字典不存在的keyKeyboardInterrupt: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
|
ArithmeticErrorAssertionErrorAttributeErrorBaseExceptionBufferErrorBytesWarningDeprecationWarningEnvironmentErrorEOFErrorExceptionFloatingPointErrorFutureWarningGeneratorExitImportErrorImportWarningIndentationErrorIndexErrorIOErrorKeyboardInterruptKeyErrorLookupErrorMemoryErrorNameErrorNotImplementedErrorOSErrorOverflowErrorPendingDeprecationWarningReferenceErrorRuntimeErrorRuntimeWarningStandardErrorStopIterationSyntaxErrorSyntaxWarningSystemErrorSystemExitTabErrorTypeErrorUnboundLocalErrorUnicodeDecodeErrorUnicodeEncodeErrorUnicodeErrorUnicodeTranslateErrorUnicodeWarningUserWarningValueErrorWarningZeroDivisionError |
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提高了代码的可读性,提高了代码的执行效率。

浙公网安备 33010602011771号