异常处理语句

在了解异常处理之前,我们先对它的语句进行说明,如下:

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关键字

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)

04-20 19:01