异常是什么?
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
举个例子:
num = eval(input("please input a number: "))
print(num**2)
当输入为一个数字时:
>>>
please input a number: 100
10000
当输入位字符串时:
please input a number: no
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'no' is not defined
>>>
此时python发生了异常,解释器返回异常信息,并退出程序。在异常信息中,Traceback
为回溯标记,NameError
为异常类型,是最重要的部分,:后紧跟着的是异常内容提醒。
常见的异常类型
名称 | 描述 |
---|---|
ImportError | 导入模块/对象失败 |
NameError | 未声明/初始化对象 (没有属性) |
SyntaxError Python | 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
UnicodeError Unicode | 相关的错误 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
异常处理: try-expect语句
基本语法格式:
try:
num = eval(input("please input a number: "))
print(num**2)
except NameError:
print("input error!! please input another number! ")
再次输入no得到如下结果:
please input a number: no
input error!! please input another number!
异常的高级用法
1.多个except语句
try:
<语句块1>
except <异常类型1>:
<语句块2>
...
except <异常类型n>:
<语句块n>
except <异常类型n+1>:
<语句块n+1>
2.配合else和finally保留字使用
try:
<语句块1>
except <异常类型1>:
<语句块2>
else:
<语句块3>
finally:
<语句块4>
else:当try中语句块1正常执行结束其没有异常时执行,可以看作是对try语句块正常执行后的一种追加处理。
finally:总会执行,可以将语句块1的一些收尾工作放在这里,例如关闭文件等。
异常和错误
异常和错误是两个相似但不同的概念,二者哦度可能引起程序执行错误推出,属于程序没有考虑到的例外情况。然而,绝大多数不可控因素是可以预见的,这种可以预见的例外情况称为“异常”(checked expection),发生后经过妥善处理可以继续执行。
另一些因为逻辑产生的不可与贱的例外情况称为“错误”(unchecked exception),错误发生后程序无法恢复执行。