0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python如何捕获异常和主动抛出异常

python爬虫知识分享 ? 来源:python爬虫知识分享 ? 作者:python爬虫知识分享 ? 2022-03-04 17:09 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

python如何主动抛出异常和捕获异常

1. 如何抛出异常?

异常的产生有两种来源:

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

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

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

def demo_func(filename):
    if not os.path.isfile(filename):
        raise Exception

2. 如何捕获异常?

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

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

第一种语法

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

try:
    代码A
except [EXCEPTION]:
    代码B

第二种语法

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

try:
    代码A
except [EXCEPTION] as e:
    代码B

第三种语法

使用 try ... except ... else

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

try:
    代码A
except [exception] as e:
    代码B
else:
    代码C

举个例子

不发生异常的情况

>>> try:
...     4/2
... except ZeroDivisionError as e:
...     print("发生了异常:错误信息如下: \n" + str(e))
... else:
...     print("程序正常运行")
...
2
程序正常运行

发生异常的情况

>>> try:
...     1/0
... except ZeroDivisionError as e:
...     print("发生了异常:错误信息如下: \n" + str(e))
... else:
...     print("程序正常运行")
...
发生了异常:错误信息如下:
integer division or modulo by zero

第四种语法

使用 try ... except ... finally

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

try: 代码A except [exception] as e: 代码B finally: 代码C

举个例子

发生异常的情况

>>> try:
...     1/0
... except ZeroDivisionError as e:
...     print("发生了异常:错误信息如下: \n" + str(e))
... finally:
...     print("程序运行结束!!")
...
发生了异常:错误信息如下:
integer division or modulo by zero
程序运行结束!!

不发生异常的情况

>>> try:
...     4/2
... except ZeroDivisionError as e:
...     print("发生了异常:错误信息如下: \n" + str(e))
... finally:
...     print("程序运行结束!!")
...
2
程序运行结束!!

3. 捕获多个异常?

每个except捕获一个异常

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

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

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

try:
    代码A
except [exception1] as e:
    代码B
except [exception2] as e:
    代码C
except [exception3] as e:
    代码D

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

try:
    1/0
except IOError:
    print("IO读写出错")
except FloatingPointError:
    # 浮点计算错误
    print("计算错误")
except ZeroDivisionError:
    # 除数不能为 0
    print("计算错误")
# output: 计算错误

一个except捕获多个异常

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

答案是,可以的。

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

try:
    1/0
except IOError:
    print("IO读写出错")
except (ZeroDivisionError, FloatingPointError):
    print("计算出错")
# output: 计算错误

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    56

    文章

    4831

    浏览量

    87448
  • 异常
    +关注

    关注

    0

    文章

    23

    浏览量

    9388
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    harmony-utils之CrashUtil,异常相关工具类

    harmony-utils之CrashUtil,异常相关工具类
    的头像 发表于 07-04 16:33 ?147次阅读

    机器学习异常检测实战:用Isolation Forest快速构建无标签异常检测系统

    本文转自:DeepHubIMBA无监督异常检测作为机器学习领域的重要分支,专门用于在缺乏标记数据的环境中识别异常事件。本文深入探讨异常检测技术的理论基础与实践应用,通过IsolationForest
    的头像 发表于 06-24 11:40 ?682次阅读
    机器学习<b class='flag-5'>异常</b>检测实战:用Isolation Forest快速构建无标签<b class='flag-5'>异常</b>检测系统

    PLC指示灯异常闪烁原因及维修

    PLC(可编程逻辑控制器)作为工业自动化控制的核心设备,其运行状态的稳定性直接影响生产线的效率与安全。指示灯作为PLC最直观的状态反馈窗口,其异常闪烁往往预示着潜在故障。本文将系统分析PLC指示灯
    的头像 发表于 06-07 16:13 ?2196次阅读
    PLC指示灯<b class='flag-5'>异常</b>闪烁原因及维修

    泰克示波器高级触发功能捕获异常信号的5种方法

    在电子工程领域,示波器是调试和分析信号的核心工具,而泰克示波器凭借其强大的高级触发功能,能够精准捕获异常信号,帮助工程师快速定位问题。本文将详细介绍五种利用泰克示波器高级触发功能捕获异常
    的头像 发表于 05-29 09:38 ?240次阅读
    泰克示波器高级触发功能<b class='flag-5'>捕获</b><b class='flag-5'>异常</b>信号的5种方法

    散热设计与测试:PCBA异常发热的解决之道

    在电子设备的生产和测试过程中,PCBA(印制电路板组装)异常发热是一个常见且棘手的问题。过高的温度不仅会影响设备的性能,还可能导致元器件损坏甚至设备报废。因此,快速定位发热原因并采取有效的解决措施
    的头像 发表于 04-10 18:04 ?657次阅读

    泰克MDO3052示波器波形捕获率评测

    能力,为用户提供选型参考。 一、波形捕获率的核心价值与技术原理 波形捕获率是示波器在单位时间内捕获并处理波形的次数,直接影响异常信号的捕获
    的头像 发表于 04-02 11:49 ?429次阅读
    泰克MDO3052示波器波形<b class='flag-5'>捕获</b>率评测

    异常零流量小区检测功能介绍

    随着5G部署规模不断扩大,网管KPI的分析需求突增也日益显著,存在用户感知问题无法从告警和KPI数值中直接体现的情况;或者某些小区存在故障而网络维护工程师无法及时监控识别出来。异常零流量小区,就是指
    的头像 发表于 03-22 09:54 ?510次阅读
    <b class='flag-5'>异常</b>零流量小区检测功能介绍

    PLC异常工作的原因和解决办法

    PLC(可编程逻辑控制器)异常工作的原因及解决办法。
    的头像 发表于 02-24 17:27 ?1164次阅读

    电路异常现象及解决

    1 电路异常现象 这是面包板论坛看到的一则帖子,帖主的问题主要是使用一个网上借鉴的光耦串口隔离电路,结果实际调试发现根本通讯不上: ? 您是否已经看到这个问题发生的原因了? ? 2 问题原因
    的头像 发表于 02-07 10:10 ?589次阅读
    电路<b class='flag-5'>异常</b>现象及解决

    串口通讯异常处理方法 串口设备连接方式

    串口通信异常处理方法 1. 异常检测 在串口通信中,首先需要能够检测到异常情况。异常检测可以通过以下几种方式实现: 硬件检测 :利用串口硬件的中断和状态寄存器来检测
    的头像 发表于 12-27 09:53 ?4233次阅读

    单片机异常复位的原因

    单片机异常复位是指单片机在正常工作过程中,非预期地返回到初始状态或重启。这种异常复位现象可能由多种因素引起,以下是对单片机异常复位原因的详细分析:
    的头像 发表于 10-17 17:56 ?3261次阅读

    令人头疼的异常重启,竟然是KV的锅…

    合宙模组异常重启原因排查
    的头像 发表于 09-26 18:14 ?921次阅读
    令人头疼的<b class='flag-5'>异常</b>重启,竟然是KV的锅…

    仪表温度异常的产生原因

    电子发烧友网站提供《仪表温度异常的产生原因.docx》资料免费下载
    发表于 09-12 14:09 ?0次下载

    Panasonic松下焊接电异常处理

    电子发烧友网站提供《Panasonic松下焊接电异常处理.pdf》资料免费下载
    发表于 08-19 14:24 ?0次下载

    嵌入式C编程常用的异常错误处理

    嵌入式C编程中,异常错误处理是确保系统稳定性和可靠性的重要部分。以下是一些常见的异常错误处理方法及其详细说明和示例: 1. 断言 (Assertions) 断言用于在开发阶段捕获程序中的逻辑错误
    发表于 08-06 14:32