Python3笔记046 - 9.1 异常处理
第9章 异常处理及程序调试
9.1 异常处理
python中常见的异常
序号 | 异常 | 描述 |
---|---|---|
01 | NameError | 尝试访问一个没有声明的变量引发的错误 |
02 | IndexError | 索引超出序列范围引发的错误 |
03 | IndentationError | 缩进错误 |
04 | ValueError | 传入的值错误 |
05 | KeyError | 请求一个不存在的字典关键字引发的错误 |
06 | IOError | 输入输出错误 |
07 | ImportError | 当import语句无法找到模块引发的错误 |
08 | AttributeError | 尝试访问未知的对象属性引发的错误 |
09 | TypeError | 类型不合适引发的错误 |
10 | ZeroDivisionError | 除数为0引发的错误 |
异常处理语句
1、try...except语句
使用try...except语句捕获异常,当程序出错时,输出错误信息后,程序会继续执行。
# 异常语法
try:
block1
except [ExceptionName [as alias]]:
block2
参数说明:
block1:表示可能出现错误的代码块
[ExceptionName [as alias]]:可选参数,用于指定要捕获的异常。
block2:表示进行异常处理的代码块。
# try...except举例,最常用的,只给出笼统的异常名称:Exception
try:
value = 8 / 0
print("value is:", value)
except Exception as e:
print(e)
# try...except举例,给出具体的异常匹配名称:ZeroDivisionError
try:
value = 8 / 0
print("value is:", value)
except ZeroDivisionError:
print("0不能作为除数!")
2、try...except...else语句
# try...except...else举例
try:
value = 8 / 2
print("value is:", value)
except ZeroDivisionError:
print("0不能作为除数!")
else:
print("value is normal")
3、try...except...finally语句
try:
block1
except [ExceptionName [as alias]]:
block2
finally:
block3
参数说明:
finally:在任何情形都必须执行的代码,放在block3代码块中
# try...except...finally举例
'''
异常处理流程:将有可能出错的代码放在try语句后,将出错类型放在except语句后,一个except后面接一种异常类型,可以有多个except,将必须执行的代码放在finallly语句中。程序开始执行,第一种情况try语句后面的代码未出错,就不执行except语句,执行finally语句;第二种情况出错类型匹配成功,执行相应的except语句的代码,执行finally语句;第三种情况出错类型匹配不成功,报错,继续执行finally语句。
'''
try:
value = 8 / 2
print("value is:", value)
except ZeroDivisionError:
print("0不能作为除数!")
except NameError:
print("name is not defined")
finally:
print("finally一定会被执行的")
4、使用raise语句抛出异常
如果某个函数或方法可能会产生异常,但不想在当前函数或方法中处理这个异常,则可以使用raise语句在函数或方法中抛出异常。在抛出异常时,要尽量选择合理的异常对象,而不应该抛出一个与实际内容不相关的异常。
raise [ExceptionName[(reason)]]
# raise 举例
def mye( level ):
if level < 1:
raise Exception,"Invalid level!"
# 触发异常后,后面的代码就不会再执行
try:
mye(0) # 触发异常
except Exception,err:
print 1,err
else:
print 2
敬请关注个人微信公众号:测试工匠麻辣烫