在了解异常处理之前,我们先对它的语句进行说明,如下:
try
:表示测试代码块以查找错误
except
:表示处理错误
finally
:表示无论try和except返回的结果如何,都必须执行
else
:表示所有异常都不执行就返回else关键字下的异常处理
代码如下:
try:
# 需要执行的语句
# x没有定义,程序必然会报错
print(x)
except Exception as e:
# 将错误进行打印
print(e) #name 'x' is not defined
finally:
# 不管怎样都地执行
print("我已经执行完毕")
如果没有try except
语句,那么程序将会报一大堆地红色错误,except语句负责捕获异常,并将结果进行返回。
当程序出现多个异常时,可以根据自己地需要定义多个Exception,即定义错误地类型。
代码如下:
try:
# 除数不能为0
# 这里可以使用内置的 ZeroDivisionError类型
a = 3 / 0
except NameError as e:
print(e)
except ValueError as f:
print(f)
except:
print("其他的异常")
或者使用else
语句进行输出,当所有的异常都不是报错的类型时,则执行else语句。
代码如下:
try:
a = 3/0
except NameError as e:
print(e)
except ValueError as f:
print(f)
else:
print("其他的异常")
raise关键字用来引发异常,并且能够定义所引发异常类型、以及打印给用户的文本。这个关键字能够在使用条件语句的时候抛出异常。
代码如下:
try:
a = int(input("请输入一个整数"))
if a > 10:
raise TypeError("输出的数太大了,抛出异常")
except TypeError as e:
print(e)
以下是一些常见的异常类型:
ValueError
:传递给函数的参数无效或不正确。
TypeError
:函数或操作应用于不适当的数据类型。
AttributeError
:尝试访问对象不存在的属性。
KeyError
:试图访问不存在的字典键。
IndexError
:尝试访问不存在的列表索引或元组索引。
IOError
:在执行文件操作时发生输入/输出错误。
ImportError
:尝试导入无法找到的模块或包。
ZeroDivisionError
:除数不能为零。
KeyboardInterrupt
:用户中断了程序的执行。
NameError
:尝试访问不存在的变量或函数。
NotImplementedError
:尝试调用尚未实现的方法。
我们在处理异常时,不知道python自带的异常有哪些,我们想自定义异常,同时还能让python解释器进行识别。这时候我们该怎么办呢?
代码如下:
# 创建一个类使它继承Exception父类
# 这里就相当于创建了一个自己的异常类
class MyError(Exception):
# 给定一个msg参数,用于接收异常的信息
def __init__(self,msg):
self.msg = msg
try:
a = int(input("请输入一个整数"))
if a > 10:
# 使用raise关键字进行异常的抛出
raise MyError("输出的数太大了,抛出异常")
except MyError as e:
print(e)