12-错误和内置异常、异常处理、自定义异常

错误和内置异常

由于未遵循语言的正确结构(语法)而导致的错误称为语法错误或解析错误。

错误也可能在运行时发生,这些被称为异常。 例如,当我们尝试打开的文件不存在(FileNotFoundError),将数字除以零(ZeroDivisionError),找不到我们尝试导入的模块(ImportError)等时,就会发生这种情况。

每当发生这种类型的运行时错误时,Python都会创建一个异常对象。如果处理不当,它将输出对该错误的回溯,以及关于该错误发生原因的一些详细信息。

内置异常

非法操作可能引发异常。Python中有很多内置的异常,当出现相应的错误时就会引发这些异常。我们可以使用local()内置函数查看所有的内置异常。

异常处理

Python有许多内置的异常 ,当其中的某些错误出现时,它们会强制您的程序输出错误。

当发生这些异常时,它将导致当前进程停止并将其传递给调用进程,直到被处理为止。如果不处理,我们的程序将崩溃。

例如,如果函数A调用函数B,后者又调用函数C,并且在函数C中发生异常。如果不在C中处理该异常,则该异常将传递给B,然后传递给A。

如果不进行处理,就会抛出一条错误消息,我们的程序就会意外地突然停止。

捕捉异常

可以使用try语句处理异常。

可能引发异常的关键操作放在try子句中,并且将处理异常的代码编写在except子句中。

捕获异常后,我们将执行什么操作取决于我们自己。

在此程序中,我们循环执行,直到用户输入具有有效倒数的整数。可能导致异常的部分放在try块中。

如果没有异常发生,则跳过除块以外的内容,并继续正常流程。但是,如果发生任何异常,它将被except块捕获。

在这里,我们使用sys模块中的exinfo()函数打印异常的名称,并要求用户再试一次。我们可以看到值‘a’和‘1.3’会导致ValueError,‘0’会导致ZeroDivisionError。

捕捉特定异常

在上面的示例中,我们没有在except子句中提到任何异常。

一个try子句可以有任意数量的except子句来以不同的方式处理它们,但是在发生异常时只会执行一个except子句。

我们可以使用值的元组在except子句中指定多个异常。

引发异常

异常是在运行时出现相应错误时抛出的,但是我们可以使用关键字raise强制抛出异常。

我们还可以选择将值传递给异常,以阐明为什么会引发异常。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zd40OlMn-1683716755619)(null)]

try…finaly

try语句可以有一个可选的finally子句。不管在什么情况下都会执行这个子句。

在所有这些情况下,无论资源是否成功,我们都必须清除该资源。这些操作(关闭文件,GUI或与网络断开连接)在finally子句中执行,以确保执行。

自定义异常

在Python中,用户可以通过创建新类来定义此类异常。该异常类必须直接或间接地从Exception该类派生。大多数内置异常也是从此类派生的。

在这里,我们创建了一个名为CustomError的用户定义异常,该异常是从Exception类派生的。 与其他异常一样,可以使用带有可选错误消息的raise语句来引发此新异常。

最好将程序引发的所有用户定义的异常放在单独的文件中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

且乐一杯酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值