1.异常和错误
异常和错误是两个相似但不同的概念。
再进行编程时,常常会因为各种原因而出现不可控的错误,会引起程序执行错误并退出。
对于我们可以预见的例外情况,我们叫他 “ 异常 ” ;对于不可以预见的例外情况称为 “ 错误 ” 。
异常例如:程序希望获得(输入)数字,却得到了其它字符输入、打开一个错误的文件等等。
错误则是:因为一些程序编码逻辑产生的不可预见的例外情况,错误发生后程序无法恢复执行,而且程序本不该处理这类可能的例外。
2.异常信息
有如下程序:
>>> num = eval(input("请输入一个整数:"))
>>> print(num)
>>>
请输入一个整数:no
Traceback (most recent call last):
File "d:\VS Code.txt\code-python\1.py", line 1, in <module>
num = eval(input("请输入一个整数"))
File "<string>", line 1, in <module>
NameError: name 'no' is not defined
可以看到,在运行程序时,当我们输入错误的信息,Python解释器返回了异常信息,并退出程序。该异常信息按照固定格式输出,我们可以通过阅读它,获取程序有关异常的信息。
Traceback:异常回溯标记
“d:\VS Code.txt\code-python\1.py”:异常文件路径
line 1:异常发生的代码行数
NameError:异常类型
name ‘no’ is not defined:异常内容提示
3.try-except语句
语法格式如下:
try:
<语句块1>
except <异常类型>:
<语句块2>
语句块1是正常执行的程序内容,当 发生异常时 执行 except 保留字后面的语句,为语句块1增加异常处理。
4.进阶用法
语法格式如下(是分支结构的一种表达方法):
try:
<语句块1>
except <异常类型>:
<语句块2>
...
except <异常类型>:
<语句块N-1>
except:
<语句块N>
其中,第 1 个到第 N 个 except 语句后面都指定了异常类型,说明这些 except 所包含的语句块只处理这列类型的异常。最后一个 except 语句没有指定任何类型,表示它对应的语句块可以处理所有其他异常(即把所以其他的没有指明的异常统一处理)。
也可以在结尾使用保留字 “ else ”,“ finally ” 。
语法:
try:
<语句块1>
except <异常类型>:
<语句块2>
...
except <异常类型>:
<语句块N-1>
except:
<语句块N>
else:
<语句块N+1>
finally:
<语句块N+2>
else:可以看作是,当程序正常执行时,才会被执行的一种追加处理。若程序出现异常,则(<语句块N+1>)不会被执行。
finally:无论程序是否发生异常,(<语句块N+2>)最后都会被执行。