python抛出异常写法_零基础学 Python(32):如何抛出和捕获异常?「建议收藏」

python抛出异常写法_零基础学 Python(32):如何抛出和捕获异常?「建议收藏」1.如何抛出异常?异常的产生有两种来源:一种是程序自动抛出,比如1/0会自动抛出ZeroDivisionError一种是开发者主动抛出,使用raise关键字抛出。在Python中是使用raise关键字来抛出异常的,比如在下面这个函数中,如果不存在目标文件,则会抛出一个Exception通用异常。2.如何捕获异常?出现错误或者异常没有关系,关键在于你要学会预判程序可能会出现…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1. 如何抛出异常?

异常的产生有两种来源:

一种是程序自动抛出,比如 1/0 会自动抛出 ZeroDivisionError

一种是开发者主动抛出,使用 raise 关键字抛出。

在 Python 中是使用 raise 关键字来抛出异常的,比如在下面这个函数中,如果不存在目标文件,则会抛出一个 Exception 通用异常。

2. 如何捕获异常?

出现错误或者异常没有关系,关键在于你要学会预判程序可能会出现的错误或异常,然后在代码中捕获这些异常并处理。

异常的捕获的语法有如下四种:

第一种语法

只捕捉但是不想获取异常信息

第二种语法

不但捕捉了还要获取异常信息,赋值给 e 后,后面你可以把异常信息打印到日志中。

有了上面的基础语法,可以扩展出下面三种常用的异常捕获的写法。

第三种语法

正常使用 try … except …

如果代码A发生了异常,则会走到代码B的逻辑。

举个例子

第四种语法

使用 try … except … else

如果代码A发生了异常,则会走到代码B的逻辑,如果没有发生异常,则会走到代码C

举个例子

不发生异常的情况

发生异常的情况

第三种:使用 try … except … finally

如果代码A发生了异常,则会走到代码B的逻辑,最后不管有没有发生异常都会走到代码C

举个例子

发生异常的情况

不发生异常的情况

3. 捕获多个异常?

每个except捕获一个异常

一个 try 语句可能有多个 except 子句,以指定不同异常的处理程序,但是最多会执行一个处理程序。

当代码 A 在运行中抛出了异常时,Python 解释器会逐行运行代码,如果抛出的异常是 exception1 那么后面直接运行代码B,运行完 B 后,就不会再判断后面两个 except 语句了。

而如果不是 exception1 ,而是 exception2 ,那会运行代码C,而不会再运行第三个 except 语句了。

举个例子吧,下面这段代码,由于 1/0 会抛出 ZeroDivisionError 错误,所以前面两个异常匹配都不成功,而在最后一个 except 成功匹配上,最终打印出 除数不能为 0

一个except捕获多个异常

上面的例子可以看出来,第二个异常和第三个异常是属于同一类,就是 计算错误,异常处理的代码是一样的,那有没有办法将它们合并在一起呢,简化一下代码呢?

答案是,可以的。

在 except 后面其实是可以接多个异常的,多个异常之间使用括号包裹。只要匹配上一个就算捕获到,就会进入相应的代码分支。

6d0a13540fb012fe6a2d5950d17ca030.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183433.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL——事务(Transaction)详解

    MySQL——事务(Transaction)详解该博客详解MySQL中的事务一、事务定义Transaction事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同…

    2022年5月5日
    44
  • ubuntu卸载foxit reader「建议收藏」

    ubuntu卸载foxit reader「建议收藏」翻译自:https://askubuntu.com/questions/816678/how-can-i-uninstall-foxit-reader-from-16-04使用安装目录里面的maintenancetool通常的安装目录为home/(user)/opt/foxitsoftware/foxitreader,也可以通过locatefoxit查找目录可能需要root权限,使用…

    2022年5月30日
    82
  • PostgreSQL 9.6.1,9.5.5,9.4.10,9.3.15,9.2.19和9.1.24发布!

    PostgreSQL 9.6.1,9.5.5,9.4.10,9.3.15,9.2.19和9.1.24发布!

    2022年2月22日
    59
  • linux下发送邮件[通俗易懂]

    linux下发送邮件[通俗易懂]先安装一个mailxyuminstallmailx配置:126邮箱为例,自己去官网注册一个,在这里我注册了一个huangbaokangtest@126.com在/etc/mail.rc文件末尾加入如下配置setfrom=huangbaokangtest@126.comsetsmtp=smtp.126.comsetsmtp-auth-user=huangbaokangtes…

    2022年10月20日
    3
  • 0基础激光切割怎么学_吉他入门零基础视频教程

    0基础激光切割怎么学_吉他入门零基础视频教程杂谈最近有几个人加我,都说是刚开始学激光slam,基本都是研一,情况也都差不多,有的是课题组里只有自己做slam,有的是完全没人带,自己也没有基础.仔细想一想,其实入门slam真是个不容易的事.首先,编程语言,大多数使用c++,少数用python,c++你得至少能写个小demo吧.知道了如何写c++,还要准备编译环境吧,由于编译以及依赖等问题,做slam基本都用linux,还得知道如何使用ubuntu的命令行,知道怎么编译代码.关于机器人相关的大部分代码都使用ros做接口,因为接口统一,使用方式统

    2022年8月23日
    7
  • AutoreleasePool的那些事

    AutoreleasePool的那些事

    2021年6月6日
    131

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号