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

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


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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 阅读书源最新2020在线导入_书源篇三及6.5.0版本介绍

    阅读书源最新2020在线导入_书源篇三及6.5.0版本介绍书源篇三及6.5.0版本介绍魔幻2020魔幻的2020,开启不一样的生活状态,作为一名技术宅,不出门虽我愿,但看到空荡荡的街头,心中却有种难言的难过与害怕。我不向往繁华。但喜欢车马如龙,街灯繁华。愿祖国强盛人长久,我辈身强振家兴!书源及工作原理书源:一个网站的规则描述文件,可能包括有多个来源;来源:聚合网站包括多个网站的内容,一个来源表示其中一个网站。仓库:存储书源的地方…

    2022年6月16日
  • 集合和数组相互转换[通俗易懂]

    集合和数组相互转换[通俗易懂]集合转数组【强制】使用集合转数组的方法,必须使用集合的toArray(T[]array),传入的是类型完全一样的数组,大小就是list.size()。说明:使用toArray带参方法,入参分配的数组空间不够大时,toArray方法内部将重新分配内存空间,并返回新数组地址;如果数组元素个数大于实际所需,下标为[list.size()]的数组元素将被置为…

    2022年6月29日
  • jdbc fetchsize_jdbc和odbc的关系

    jdbc fetchsize_jdbc和odbc的关系DBUtilscommons-dbutils是Apache组织提供的一个开源JDBC工具类库,封装了针对于数据库的增删改查操作APIQueryRunnerResulSetHandlerDbutils插入举例Connection conn = null; try { QueryRunner runner = new QueryRunner(); conn = JBBCUtils.getConnections3();

    2022年8月8日
  • neokylin操作系统_linuxiso文件怎么安装

    neokylin操作系统_linuxiso文件怎么安装xjdlt于2017-04-0615:49:11发表:楼主这3G多,我在论坛上申请的为什么才1.85G?5q2m于2015-11-2922:09:20发表:官网登不上,资源又少,快疯了ttt105于2015-11-2510:35:02发表:谢谢了。学习一下了PlumLee于2015-11-1511:50:25发表:我来支持一下,试用一下。马踏飞燕于2015-1…

    2022年8月10日
  • Eclipse安装中文简体语言包(官方下载安装教程)[通俗易懂]

    更新2020/1/26https://download.eclipse.org/technology/babel/update-site/R0.17.1/2019-12/更新2019/7/20https://download.eclipse.org/technology/babel/update-site/R0.17.0/2019-06/更新2019/5/22附:eclip…

    2022年4月6日
  • 微软面试-微软面试题(5)[通俗易懂]

    微软面试-微软面试题(5)[通俗易懂]微软面试题-头脑  ★如果你有一个许多部件可以拆卸的时钟,你将它一块块拆开,但是没有记住是怎样拆的。然后你将各个零件重新组装起来,最后发现有三个重要零件没有放进去。这时你如何重新组装这个时钟?  ★如果你需要学习一门新的计算机语言,你会怎样做?  ★假设由你负责设计比尔·盖茨的卫生间。当然,钱不成问题,但是你不可以和比尔谈。你会怎样做?  ★到目前为止,你遇到的最难回答的问题是什么?  ★如果微软

    2022年8月26日

发表回复

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

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