首页 > 其他分享 >【Pyhton】异常处理

【Pyhton】异常处理

时间:2024-06-06 21:33:00浏览次数:12  
标签:try ... 处理 except Pyhton print txt 异常

异常是什么?

    软件程序在运行过程中,非常可能遇到刚刚提到的这些问题,我们称之为异常,英文是: Exception ,意思是例外。遇到这些例外情况, 或者叫异常,我们怎么让写的程序做出合理的理,安全的退出, 而不至于程序崩溃呢?

工作中,程序遇到的情况不可能完美。比如:程序要打开某个 文件,这个文件可能不存在或者文件格式不对;程序在运行 着,但是内存或硬盘可能满了等等。

伪代码说明异常机制

如果我们要拷贝一个文件,在没有异常机制的情况下我们需要考虑各种异常情况伪代码如下:
// d:/a.txt复制到e:/a.txt(伪代码)
if ("d:/a.txt"这个文件存在){
    if(e盘的空间大于a.txt文件的长度){
        if(文件复制一半IO流断掉){
             停止copy,输出:io流有问题!     
  }else{
        copyFile("d:/a.txt","e:/a.txt");        
  }
  }else{
    System.out.println("e盘空间不够存放a.txt文件!");
}
}else{
     System.out.println("a.txt不存在!");
}
这种方式,有两个坏处:
  •  逻辑代码和错误处理代码放一起!
  •  程序员本身需要考虑的例外情况较复杂,对程序员本身要求较高!

如上情况,如果是用Python的异常机制来处理,对比如下:

异常机制本质

当程序出现异常,程序安全的退出、处理完后继续执行的机制
python 中,引进了很多用来描述和处理异常的类,称为异常类。异 常类定义中包含了该类异常的信息和对异常进行处理的方法。下面 较为完整的展示了python中内建异常类的继承层次:  如测试0是否被整除:
#测试简单的0不能做除数异常
a = 3/0

 报错,异常了,显示0不能被整除

Traceback (most recent call last):
  File "...mypro_exception/my01.py", line 1,
in <module>
    a = 3/0
ZeroDivisionError: division by zero
Process finished with exit code 1

 使用try...except来定位异常:

try:
    a = 3/0
except ZeroDivisionError as e:
    print(e)   
    # division by zero  

异常解决的关键:定位

当发生异常时,解释器会报相关的错误信息,并会在控制台打印出 相关错误信息。我们只需按照从上到下的顺序即可追溯 (Trackback)错误发生的过程,最终定位引起错误的那一行代码。 【示例】追溯异常发生的过程
def a():
    print("run in a() start! ")


num = 1 / 0
print("run in a() end! ")


def b():
    print("run in b() start!")
a()
print("run in b() end! ")


def c(): print("run in c() start!")
b()
print("run in c() end! ")
print("step1")
c()
print("step2")

try...except结构

try...except 是最常见的异常处理结构。结构如下:
try : 被监控的可能引发异常的语句块 except   BaseException [ as   e ]: 异常处理语句块
try 块包含着可能引发异常的代码, except 块则用来捕捉和处理发生的异常。 执行的时候,如果 try 块中没有引发异常,则跳过 ecept 块继续执行后续代码; 执行的时候,如果 try 块中发生了异常,则跳过 try 块中的后续代码,跳到相应的 except 块中处理异常;异常处理完后,继续执行后续代码。 【示例】遇到异常的执行顺序
#测试简单的0不能做除数异常
try:
    print("step1")
    a = 3/0
    print("step2")
except BaseException as e:
    print("step3")
    print(e)
print("step4")

除数为 0 ,遇到异常输出结果:
step1 step3 division by zero   step4

try...except...else结构

try...except...else 结构增加了 else块 。如果 try 块中没有抛出异常,则执行 else 块。 如果 try 块中抛出异常,则执行 except 块,不执行 else 块。 try...except...finally 结构 try...except...finally 结构中, finally 块无论是否发生异常都会被执行; 通常用来释放 try 块中申请的资源。

常见异常汇总

自定义异常类

程序开发中,有时候我们也需要自己定义异常类。自定义异常类一 般都是运行时异常,通常继承 Exception 或其子类即可。命名一般以 Error 、 Exception 为后缀。 自定义异常由 raise 语句主动抛出。

标签:try,...,处理,except,Pyhton,print,txt,异常
From: https://blog.csdn.net/m0_73596070/article/details/139484516

相关文章

  • 基于FPGA的图像直方图均衡化处理verilog实现,包含tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览FPGA的仿真图如下:   将数据导入MATLAB,对比结果如下:  2.算法运行软件版本MATLAB2022a vivado2019.2 3.部分核心程序  `timescale1ns/1ps////Company://Engineer:////CreateDate:2023/01/1901:47:15//DesignNa......
  • C语言关于预处理的基础介绍
    一:预定义符号    在c语言中有一些预定义的符号,这些符号已经定义好了,用户不需要再次定义只需要使用即可。 __FILE__:显示当前进行编译的源文件__LINE__:显示当前代码行号__DATE__:显示当前文件被编译的日期__TMIE__:显示当前文件被编译的时间__STDC__:查看当前编译......
  • LVGL(二)切换页面,同时清理内存,异常总结之动画删除
    项目场景:LVGL切换页面时,出现异常问题的总结。这里假设有2个页面,一个页面是启动页面,一个是密码盘页面。都有几十个部件,包含样式,动画,事件等。使用squareline生成代码。两个页面中都有一个按钮可以互相切换到另外一个页面。作者已经运行测试过了,切换页面,同时清除内存,再也没有......
  • 【Python机器学习】无监督学习——不同类型的预处理
    之前学习过,一些算法(比如神经网络和SVM)对数据缩放非常敏感。因此,通常的做法是对特征进行调节,使数据更适合于这些算法。通常来说,这是对数据的一种简单的按照特征的缩放和移动。举例:importmglearn.plotsimportmatplotlib.pyplotaspltmglearn.plots.plot_scaling()plt.sh......
  • 高速信号处理卡:523-基于 XCZU15EG的双 FMC通用信号处理板 高速信号处理
    (ZCU102E的pin兼容替代卡)基于XCZU15EG的双FMC通用信号处理板一、板卡概述   本板卡基于XilinxZynqUltrascale+MPSOC系列SOCXCZU15EG-FFVB1156架构,PS端搭载一组64-bitDDR4,容量32Gb,最高可稳定运行在2400MT/s,1路USB3.0接口、1路千兆网络接口、1路DP接口......
  • FPGA数字信号处理之:小波变换算法的实现
    一、定义        小波变换(wavelettransform,WT)是一种新的变换分析方法,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的“时间-频率”窗口,是进行信号时频分析和处理的理想工具。它的主要特点是通过变换能够......
  • String、StringBuilder和StringBuffer是处理字符串的三个不同的类
    在Java中,String、StringBuilder和StringBuffer是处理字符串的三个不同的类,它们各自具有不同的特点和使用场景。下面将具体分析这三个类的异同点:不可变性与可变性String:String是一个不可变的字符串,这意味着一旦一个String对象被创建,其值就不能改变。这种设计提供了值的恒定性,使......
  • Spring 云网关 MVC 异常处理
    我正在编写一个使用SpringCloudGatewayMVC构建的APIGateway应用程序。我使用了一个自定义的CircuitBreaker过滤器,该过滤器可在后端请求耗时过长时超时。我发现当请求超时时......我无法通过向客户端发送JSON格式的响应来优雅地处理失败。我拥有带有Exce......
  • Linux中sed命令b选项屏蔽指定的处理区域
     001、Linux中sed命令b选项屏蔽指定的处理区域[root@pc1test2]#lsa.txt[root@pc1test2]#cata.txt##测试数据10102a20304a30506a4070850910k61112a71314815ai91718a[root@pc1test2]#sed'1,3b;s/a/Q/'......
  • Python实现【监控远程仓库代码提交,如果有提交就自动执行需要监控测试的接口,以确保新提
    一、代码如下importgitfromdel_folderimportdel_folderimporttimefromsend_Dmessageimportsend_messagefromsend_giftimportsend_gift#设置远程仓库路径remote_url='xxx'#本地仓库路径local_path='xxx'#webhook地址和密钥webhook_url="x......