1、异常处理语句
1.1、try...except...else
说明
(1)把可能产生的异常代码放在try语句块中,把处理结果放在except语句块中。
(2)这样,当try语句块中的代码出现错误时。就会执行except语句块中的代码。
(3)如果try语句块的代码没有错误,那么except语句块不会执行。
语法格式
try:
可能产生异常的代码块...
except [ExceptionName [as e]]:
处理异常的代码块...(可以输出固定提示信息。也可以通过别名输出异常的具体内容)
else:
指定当try没有异常时要执行的语句块...
参数说明
ExceptionName [as e]:可选参数。用于指定要捕获的异常。(不选择则表示捕获全部异常)
其中ExceptionName表示要捕获的异常名称。as e表示给当前的异常指定一个别名。通过该别名可以记录异常的具体内容。
1.2、try...except...else
说明
把可能产生的异常代码放在try语句块中。把处理结果放在except语句块中。
这样。当try语句块中的代码出现错误时。就会执行except语句块中的代码。
如果try语句块的代码没有错误。那么except语句块不会执行。
1.3、try...except...finally
说明
通常。无论程序中有无异常。finally代码块都必须要被执行。
如果分配了有限的资源(如打开文件)。则应该将释放这些资源的代码放置在finally代码块中。
1.4、raise语句抛出异常
说明
如果某个函数可能会产生异常。但不想子啊当前函数中处理这个异常。则可以使用raise语句在函数中抛出异常。
语法格式
raise [ExceptionName [(reason)]]
参数说明:
[ExceptionName [(reason)]]:可选参数。用于指定要抛出的异常以及异常信息的相关描述(不选择则表示把当前错误原样抛出)。
其中reason也可以省略。省略后表示在抛出异常时不附带任何描述信息。
1.5、pass语句忽略异常
1.6、assert语句调试程序
说明
(1)assert一般用于对程序某个时刻必须满足的条件进行验证。
(2)assert语句只在调试阶段有效。可以通过在执行python命令时加入-O(大写)参数来关闭assert语句。
案例如下:
E:
cd E:\program\python\Code
python -O division_apple_bug.py
语法格式
assert expression [。reason]
参数说明:
expression:条件表达式。为真则什么都不做;为假则抛出AssertionError异常。
reason:可选参数。用于对判断条件进行描述
- 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
2、Python常见异常
SyntaxError
语法错误。
案例
if action_str in ["1","2","3"]:
# print("您输入的不正确,请重新选择!")
执行上面代码,将出现如下报错:
SyntaxError: unexpected EOF while parsing
NameError
尝试访问一个没有声明的变量引起的错误。
IndexError
索引超出序列范围引起的错误。
ValueError
传入的值错误。
KeyError
请求一个不存在的字典关键字引发的错误。
AssertionError
验证错误。
IOError
输出/输入错误(例如:读取的文件不存在)。
ImportError
当import无法找到模块或from无法在模块中找到相应的名称时引发的错误。
AttributeError
尝试访问未知的对象属性引发的错误。
TypeError
类型不合适引发的错误。
MemoryError
内存不足引发的错误。
ZeroDivisionError
除数为0引发的错误。
IndentationError
缩进错误。
案例
for i in range(10):
if i%2 == 0:
#报错:
IndentationError: expected an indented block //缺少一个块没写
#改正:
for i in range(10):
if i%2 == 0:
pass
- 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