持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
首先要明白异常指的是由于代码逻辑或者用户的误操作导致的程序中断。
程序运行的过程当中由于代码编写逻辑或者用户输入等原因可能发生错误,或者程序员为了防止错误的操作进行下去人为引发错误打断程序运行,由于异常出现的情况很多,所以在Python当中有专门的语句块对错误进行管理。
这里要注意的是:布尔值当中的False是一个值,并不是我们这里聊的异常,一定要区分开。
Python报错
Python当中定义了常见的错误对象,并且为了提高排错的效率,对错误进行了分类,大家可以按照错误类型先对异常进行一个初步的定位,然后在进行分析,这里展示一个报错的内容:
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/1.py", line 2, in <module>
'a'+1
TypeError: can only concatenate str (not "int") to str
Traceback (most recent call last): 错误开始
File "C:/Users/Administrator/Desktop/1.py", line 2, in 错误的位置,如果有模块调用,会一层一层的进行报错。
'a'+1 具体报错的语句
TypeError: 错误类型
can only concatenate str (not "int") to str 错误的描述,这个很重要,要可以的去记忆
常见的异常类型
Python当中所有的错误类型都是Exception类型的子类(子类概念后续聊面向对象可以聊到),常见的错误类型有:
print(dir(__builtins__))
| 异常类型 | 描述 |
|---|---|
| AssertionError | 断言错误,有assert断言引起的,学测试的小伙伴要多关注哟 |
| AttributeError | 属性错误,比如对字符串进行列表的操作 |
| BaseException | 错误的一个基类,自定义错误类型可以继承他 |
| TypeError | 类型错误,输入,转换,不同类型运算能引发这给类型的错误 |
| SyntaxError | 语法错误,比如:for循环后没有缩进 |
| NameError | 密码错误,一般是由于使用没有定义的变量导致的,这个在if判断多的情况下很容易出现 |
| KeyError | 键错误,一般出现在对字典不存在的键进行操作导致的 |
| FileExistsError | 文件不存在错误,读取一个不存在文件导致的问题 |
| ImportError | 导入错误,循环导入或者导入模块不存在可能出现这样的错误 |
当然Python不止有这些报错类型,欢迎大家补充。
捕获异常
try:
#需要捕获异常的语句
except [错误类型] as e:
#发生错误执行的语句
else:
#如果需要捕获异常的语句正常执行接下来执行的语句
finally:
#不论上述情况,始终会执行的语句。
Python 捕获异常有四个关键字:
try 和 except需要一起出现,try代表要尝试执行的语句,
excep代表如果尝试执行的语句除法错误执行的语句,这里except后面可以添加具体的错误类型,针对不同类型的错误可以写多个except
使用as可以到处错误对象。
else 代表try里面的语句执行成功后执行的语句。
finally 代表不论上述情况,始终会执行的语句。
引发异常
作为程序开发人员,一但发现或者判断用户可能出现误操作导致系统崩盘,比如对年龄存入字母这样要命的错误(当然一个健壮的程序是不会发生这样的异常的),所以需要对一些可能导致后续没有办法进行的错误进行提前的防御,不让他错误的进行下去,Python提供了这样的一个方法:
raise TypeError("类型错误,你的变量有问题")
Python异常处理就先讨论到这里,异常定义和异常日志之后再聊。