首页 > 编程知识 正文

python中异常处理的两种方式(python中的异常处理)

时间:2023-05-04 16:37:22 阅读:77399 作者:3670

1.定义

异常

Python异常是运行Python代码时出现的错误。 如果编写了每次发生错误时处理该异常的代码,程序将继续运行; 如果未处理例外,程序将停止并显示跟踪,其中包含有关例外的报告。

Python异常是使用try-except代码块处理的。 try-except代码块使Python执行指定的操作,同时告诉Python发生异常时该怎么办。 使用try-except代码块时,即使出现异常,程序也将继续运行,并显示在except中创建的处理信息,而不是跟踪消息。

2.try-except

在上图中,写入1/0,并原样运行。 运行新闻跟踪,告诉我zerodivisionerror 3360 divisionbyzero。 这就是Python异常,它会直接引起执行错误,无法正确执行代码。 此时,我们进行“异常捕获”。 代码如下。

如上图所示,如果将1/0外部添加到try-except并运行代码,则代码将进入except代码块区域,而不是错误。 由此可见,我们的异常被捕获了。

如上图所示,使用try-except确实捕获了异常,程序运行不报告错误。 但是,在显示情况下,需要知道程序是时报哪些异常,可以对不同的异常进行不同的处理,使编码更加人性化。 那么,接下来,让我们来看看对异常的处理吧。

例外类型

当我们第一次运行时,程序报告了上述错误,并告诉我们被除数为0且程序运行失败,此时,我们可以将此对应的错误捕捉如下。

从图中可以看到,与以前的except代码相比,在except之后添加了特定的异常“ZeroDivisionError”,给他取了别名e,并在except代码块中打印了该特定的异常。 红框的部分是例外内容,表示除了0以外。 这是特定异常的捕获,例如:

在这段代码中,我们将特定的异常称为NameError,并捕获它,以防止程序运行出错。 所以一般情况下,对代码做出预测,捕捉例外。 当然,在一个代码中,可以同时捕获多个异常。 此时,如果已经捕捉到一个异常,就不会捕捉到其他异常。 和if.else语句一样,我们只去一个地方,详细看看下面的代码。

如上图所示,我们用这个代码,捕捉到了两个例外。 当捕捉到第一个异常时,不会发生下一个异常。

那么,这些是我们知道的经常遇到的情况。 我们回去捕获特定的异常。 那么,如果有不知道的异常,该怎么捕获呢? 这是一个叫做Exce的共同异常

ption,他是“所有常规异常的基类”,如果我们不清楚要捕获啥特定异常,就用它,代码如下

虽然没有特定异常,但是Exception也捕获到了异常使得程序正确执行。

在这边,我们要熟悉一下我们经常碰到的异常类型:

importError 无法引入模块和包

indexError 下标索引超出序列边界

NameError 使用一个还未赋予对象的变量

syntaxError 代码逻辑语法出错,不能执行

TypeError 传入的对象类型与要求不符

ValueError 传入一个不被期望的值,即使类型正确

KeyError 试图访问你字典里不存在的键

IOEerror 输入输出异常

3.try...finally语法

在使用try语句后,如果某条语句出现异常,则它后面的语句不会被执行,程序直接跳到try之外的语句继续运行。finally语句的作用在于,无论try中的语句是否出现异常,finally中的语句一定会被执行,例如:

上图中,我们可以看出,就算try:里面的代码报错,不继续执行,但是,最终finally块语句中的代码还是执行了,当然一般情况下,finally语句归finally语句,异常还是会捕获的,这边只是为了强调finally块语句一定会被执行,所以通常写法如下:

finally块语句是不管try中的块语句是否出现 异常,它都会去运行。比如说操作文件时,不管try..except进行怎 么操作,到最后都要去关闭文件;再比如说我们进行数据库操作时,不管发生 什么异常,我们最后都要去关闭数据库和连接。

4.try ....except...else 语法

如果判断完没有某些异常之后还想做其他事,就可以使用else语句。下面通过两个例子来看一下:

try中代码有异常

try中代码无异常

通过上面两个例子,我们清楚的看出,当try中代码执行正确无误时,会走else部分代码,否则不走。

telse下的语句块一般是指逻辑上时跟着try中的块语句的,但是又不想写入try..except.. 中的,就可以写在else中。比如说,除法后面还要进行其他大段运算, 那么我们可以在try中放入除法那一段,其他运算逻辑放进else中。

4.raise语法(主动触发异常)

raise语句其实和except语句差不多,只是用于主动触发异常,先上一段代码看一下:

上面代码中,我们对传入的数据num进行判断,如果它为0,我们通过raise主动抛出异常。

使用场景:在开发时,如果满足 特定业务需求时,希望抛出异常,由其他需要处理的函数捕获异常。这里要注意,一旦执行了raise语句,raise后面的语句将不能执行。

总结

通过上述的学习,我们把所有的异常基础都已经学习完成,打完收工,哈哈。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。