何为异常
异常(Exception)【或者说Bug】对于一个程序员来说是非常熟悉的词。编写的程序总会因为这样或那样的原因报错,如下图所示:
当遇到程序异常时,我们需要冷静下来,仔细寻找程序出错的地方并加以改正,使得程序的输出符合我们的预期。
异常类型
在Python中,我们通过使用命令dir(__builtin__)
来查看所有的异常类型,如图所示:
在此,我们列举几个常见的异常并加以具体描述:
BaseException
:所有异常的基类Exception
:常规异常的基类AttributeError
:对象不存在此属性IndexError
:序列中无此索引IOError
:输入/输出操作失败KeyError
:映射中不存在此键NameError
:找不到变量SyntaxError
:语法错误TypeError
:对类型无效的操作ValueError
:传入无效的参数ZeroDivisionError
:除数为0
异常处理
Python使用try-except
语句进行异常处理。
基本使用
基本使用大致可分为三类:
- 指定单个异常类型,如下所示:
try:
n1=int(input("Enter a number:")
n2=int(input("Enter a number:")
print(n1/n2)
except ZeroDivisionError: #除数为0的错误类型
print("The second number cannot be zero!")
2.指定多个异常类型,如下所示:
try:
n1=int(input("Enter a number:")
n2=int(input("Enter a number:")
print(n1/n2)
except (ZeroDivisionError,ValueError): #指定多个异常类型,也可以用多个except语句
print("The second number cannot be zero!")
3.不指定异常类型,如下所示:
try:
n1=int(input("Enter a number:")
n2=int(input("Enter a number:")
print(n1/n2)
except:
print("The second number cannot be zero!")
此外,我们常常需要了解异常类型,因此常用到as语句查看其异常情况。
try:
n1=int(input("Enter a number:")
n2=int(input("Enter a number:")
print(n1/n2)
except Exception as err:
print("Something went wrong!")
print(err)
高级使用
try-except-else-finally
异常处理的高级使用的原理和循环的增强形式一样,else语句都是对程序正常运行的额外奖励,finally语句则一定会执行。
循环(break)
异常处理中可以在某一位置添加break语句,增强其程序功能。如图所示
(此处图片来源于NJU大壮老师的慕课课程:利用Python进行数据分析,并且墙裂安利):
上下文管理器及with语句
在Python文件打开中,常用with语句或异常处理语句进行操作。
(此处图片来源于NJU大壮老师的慕课课程:利用Python进行数据分析,并且墙裂安利)