异常机制

Python——异常处理机制 Python异常处理相关知识点 阅读详情

异常本质(Exception)

异常也是对象

python中一切都是对象,异常也采用对象的方式来处理:

  1. 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给解释器。
  2. 捕获异常:解释器捕获该异常后,寻找相应的代码来处理该异常

异常机制本质:

当程序出现异常,程序安全的退出、处理完后继续执行的机制

try...except...else...finally结构

try语块:        包含着可能存在的异常代码

except语块:  用来捕捉和处理发生的异常

else语块:       没有发生异常,则执行

finally语块:    有没有异常,都执行

try:
    被监控的可能引发异常的语句块
except BaseException [as e]:
    异常处理语句块
else:
    代码块
finally:
    代码块

【示例】

try:
  c = 3/0                   #出现异常
  print("step1")            #由于上一句出现异常,直接跳过
except BaseException as e:  #将捕捉的异常作为e
  print("step2")            #开始处理异常e
else:                       #没有出现异常执行else,反之不执行
  print("step3")
finally:                    #无论有没有异常都执行
  print("step4")

print("step5")              #结构外的语句正常执行

try...多个except结构 

我们一般建议(按照先子类后父类的顺序)尽量捕获可能出现的多个异常

并且针对性的写出异常处理代码。

为了避免遗漏可能出现的异常,可以在最后增加BaseException。

结构如下:

try:
    被监控的、可能引发异常的语句块
except Exception1:
    处理Exception1的语句块
except Exception2:
    处理Exception2的语句块
​
[...]
except BaseException:
    处理可能遗漏的异常的语句块

【示例】多个except结构

try:
  a = input("请输入被除数:")
  b = input("请输入除数:")
  c = float(a)/float(b)
  print(c)

#第一个异常类,如果不符合此异常类,则跳到下一个
except ZeroDivisionError:
  print("异常:除数不能为0")

#第二个异常类,如果不符合此异常类,则跳到下一个
except TypeError:
  print("异常:除数和被除数都应该为数值类型")

#最后使用最全面的BaseException,避免遗漏
except BaseException as e:
  print(e)
  print(type(e))

异常与return语句

由于return有两种作用:结束方法运行、返回值。

我们一般不把return放到异常处理结构中,而是放到方法最后。

否则可能在结构中提前结束了方法的运行

def f1():
  print("step1")

  try:
    x = 3/0

  except:
    print("step2")
    print("异常:0不能做除数")

  finally:
    print("step4")


  print("step5")
  return "e"     #returen语句放到最后,避免提前结束了方法的运行

print(f1())

常见异常汇总说明

Python中的异常类 都派生自BaseException类

常见异常

1.SyntaxError:语法错误

  int a =3 
    ^
SyntaxError: invalid syntax

2.NameError:尝试访问一个没有申明的变量

  print(a)
NameError: name 'a' is not defined

3.ZeroDivisionError:除数为0错误(零除错误)

  a = 3/0
ZeroDivisionError: division by zero

4.ValueError:数值错误

  float("gaoqi")
ValueError: could not convert string to float: 'gaoqi'

5.TypeError:类型错误

  123+"abc"
TypeError: unsupported operand type(s) for +: 'int' and 'str'

6.AttributeError:访问对象的不存在的属性

a=100
a.sayhi()
​
AttributeError: 'int' object has no attribute 'sayhi'

7.IndexError:索引越界异常

a = [4,5,6]
a[10]
​
IndexError: list index out of range

8.KeyError:字典的关键字不存在

a = {'name':"gaoqi",'age':18}
a['salary']
​
KeyError: 'salary'

异常汇总

异常名称说明
ArithmeticError所有数值计算错误的基类
AssertionError断言语句失败
AttributeError对象没有这个属性
BaseException所有异常的基类
DeprecationWarning关于被弃用的特征的警告
EnvironmentError操作系统错误的基类
EOFError没有内建输入,到达EOF 标记
Exception常规错误的基类
FloatingPointError浮点计算错误
FutureWarning关于构造将来语义会有改变的警告
GeneratorExit生成器(generator)发生异常来通知退出
ImportError导入模块/对象失败
IndentationError缩进错误
IndexError序列中没有此索引(index)
IOError输入/输出操作失败
KeyboardInterrupt用户中断执行(通常是输入^C)
KeyError映射中没有这个键
LookupError无效数据查询的基类
MemoryError内存溢出错误(对于Python 解释器不是致命的)
NameError未声明/初始化对象 (没有属性)
NotImplementedError尚未实现的方法
OSError操作系统错误
OverflowError数值运算超出最大限制
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError一般的运行时错误
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
StandardError所有的内建标准异常的基类
StopIteration迭代器没有更多的值
SyntaxErrorPython 语法错误
SyntaxWarning可疑的语法的警告
SystemError一般的解释器系统错误
SystemExit解释器请求退出
TabErrorTab 和空格混用
TypeError对类型无效的操作
UnboundLocalError访问未初始化的本地变量
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
UnicodeErrorUnicode 相关的错误
UnicodeTranslateErrorUnicode 转换时错误
UserWarning用户代码生成的警告
ValueError传入无效的参数
Warning警告的基类
WindowsError系统调用失败
ZeroDivisionError除(或取模)零 (所有数据类型)

with上下文管理

with上下文管理可以自动管理资源

在with代码块执行完毕后自动还原进入该代码之前的现场或上下文。

不论何种原因跳出with块,不论是否有异常,总能保证资源正常释放。

极大的简化了工作,在文件操作、网络通信相关的场合非常常用。 

with上下文管理的语法结构如下:

with context_expr [ as var]:
    语句块

【示例】

with open("D:/a.txt",encoding='utf8') as f:  #如果不能执行,则加入encoding='utf8'

    for line in f:                           #循环打印
        print(line)  

traceback模块生成异常日志

使用traceback,当发生异常时,可以将异常信息写入日志文件

#coding=utf-8
import traceback

try:
  num = 1/0   #发生异常

except:
  with open("C:/Users/ASUS/Desktop/a.log","a") as f:     #生成文件f,文件名为a,类型为log
    traceback.print_exc(file=f)                          #将异常通过traceback打印并输入文件f

自定义异常_raise抛出异常

程序开发中,有时候我们也需要自己定义异常类。

自定义异常类一般都是运行时异常,通常继承Exception或其子类即可。

命名一般以Error、Exception为后缀。

class AgeError(Exception):          #构造继承Exception的自定义异常类
    
  def __init__(self,errorInfo):     
    Exception.__init__(self)        #调用比自定义异常类更加全面的基类初始化
    self.errorInfo = errorInfo
      
  def __str__(self):
    return str(self.errorInfo)+",年龄错误!应该在1-150之间"

############测试代码################
if __name__ == "__main__":          #如果为True,则模块是作为独立文件运行,可以执行测试代码
  age = int(input("输入一个年龄:"))
  if age<1 or age>150:
    raise AgeError(age)             #将异常抛出,抛给自定义异常类收集
  else:
    print("正常的年龄:",age)

高速设计注意事项总结——MDI篇 在以太网高速通信系统中,MDI(Medium Dependent Interface,介质相关接口)是连接物理层芯片(PHY)与传输介质(如网线)的关键接口,其设计直接影响信号完整性、传输速率和抗干扰能力。本文围绕 MDI 及 RJ45 接口电路、关键参数、设计与布线要点展开,为高速以太网设计提供参考。本文包含MDI 及 RJ45 接口电路组成、电路设计注意事项、布局布线要求等内容 阅读详情

相关推荐

Dynamics 365 On-Premise Server v9.0部署体验

期盼已久的Dynamics 365 On-Premise的版本升级终于在11月初姗姗来迟。 11月2日起已经可以在官方渠道下载正式版的Dynamics 365 Server v9.0安装文件,版本号9.0.2,随手附上中文版安装文件下载地址。 想必已经有不少小伙伴开始尝试各种升级、安装了吧。 Dynamics 365 On-Premise的安装过程,度娘一下已经有很多了,这里就不赘述了,只是...

Roger的专栏 2140

Java 异常机制

在程序中,可能会遇到JDK提供的任何标准异常类都无法充分描述清楚我们想要表达的问题,这种情况下可以创建自己的异常类,即自定义异常类。自定义异常类只需从Exception类或者它的子类派生一个子类即可。自定义异常类如果继承Exception类,则为CheckedException异常,必须对其进行处理;如果不想处理,可以让自定义异常类继承运行时异常RuntimeException类。习惯上,自定义异常类应该包含2个构造器:一个是默认的构造器,另一个是带有详细信息的构造器。【示例】自定义异常类。

m0_68880377的博客 698

手把手教你用U盘给海信IP501H刷机:GK6323V100C芯片的4.4.2和9.0固件实战

本文详细介绍了海信IP501H电视盒子基于GK6323V100C芯片的刷机实战指南,涵盖Android 4.4.2强刷和Android 9.0免拆刷机两种方案。从工具准备、短接操作到ADB调试,提供全流程解析和常见问题解决方案,帮助用户安全高效地完成刷机操作。

lemon的博客 1456

Java异常机制详解

异常(Exception)的概念 异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。 在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。 所谓异常处理,就是指程序在出现问题时依然可以正确的执行完。 Java是采用面向对象的方式来处理异常的。处理过程: 抛出异常:在...

一介白衣入江南 3652

java实现mavlink协议解析与封包上传数据,实现mavlink数据交互,附带代码、详解

本篇文章介绍了使用java来进行mavlink协议解析,封包与解包的过程,并附带源码供大家使用。MAVLink(Micro Air Vehicle Link,微型空中飞行器链路通讯协议)是无人飞行器与地面站(Ground Control Station ,GCS)或云端服务器之间通讯,以及无人飞行器之间通讯最常用的协议。它已经在PX4、APM、PIXHAWK和Parrot AR.Drone飞控平台上进行了大量测试。

qq_30279827的博客 1449

激光雷达-IMU标定工具lidar_imu_calib保姆级教程(VLP-16实测)

本文提供激光雷达与IMU联合标定的详细实战教程,重点解析lidar_imu_calib工具在VLP-16上的应用。从环境部署、数据采集技巧到参数配置与结果验证,手把手指导完成标定全流程,并详解如何在LIO-SAM等SLAM系统中应用标定结果,确保传感器融合精度。

food6的博客 475

C++中的异常机制

实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。public:, _id(id){}protected:// 错误描述int _id;// 错误编号我们先定义一个基类,其中有2个成员变量,_errmsg用于描述错误信息,_id表示的是异常编号。成员函数是what(),表示的是返回错误信息。

weixin_71964451的博客 1072

2026年9月20日 2026年CSP-S初赛真题整理

这是本次考试最难的部分,涉及Gray Code(格雷码)+ 状态压缩 + 数学推导难点解决方案关键代码问题转化将得分差转化为m−2xim - 2x[i]m−2xi高效枚举Gray Code相邻状态O(1)转移奇偶判断利用奇偶性统一条件。

weixin_51184047的博客 628

【C++11】异常机制

异常是一种处理错误的方式:当一个函数发现自己无法处理的错误时就可以抛出异常,让这个函数的直接或间接调用者去处理这个错误。throw:当问题出现时,程序会抛出一个异常(可以是任意类型的对象)。这是通过使用 throw 关键字来完成的。try:try 块中的代码标识“将被激活的特定异常”,它后面通常跟着一个或多个 catch 块。catch:在您想要处理问题的地方,通过异常处理程序捕获异常,catch 关键字用于捕获异常,可以有多个 catch 进行捕获。

m0_51064412的博客 1022

【原创】下载RealEstate10K数据集原始视频的方法

目前互联网上能搜到下载RealEstate10K数据集原始视频的方法都已经不能用了,这篇博客介绍一种目前可用的下载RealEstate10K数据集原始视频的方法,并给出自动化的脚本代码。

沉迷单车的追风少年 2462

Google Earth Engine:LandTrendr (Landsat Collection 2)全更新使用(代码调用+UI交互)

本文介绍了使用Landsat Collection 2进行连续变化监测的分析方法,包含代码实现和可视化界面两部分。代码部分通过Google Earth Engine平台运行LandTrendr算法,设置参数包括时间范围、光谱指数、变化检测阈值等,最终生成变化幅度和检测年份的可视化图层,并将结果导出至Google Drive。可视化界面部分展示了基于LandTrendr的土地覆盖变化结果,结合Landsat影像进行分析。整个方法实现了从数据处理到结果展示的完整流程,适用于森林覆盖等环境变化监测。

此星光明博客 211

Java异常的处理机制

finally块必定会被执行,通常用于释放资源或进行清理工作。除了Java提供的异常类之外,我们还可以自定义异常类来表示特定的异常情况。在Java中,可以通过创建自定义的类来定义自己的异常。自定义异常类通常需要继承自Java提供的异常类(如Exception或RuntimeException)或它们的子类。// 自定义异常类 public class MyException extends Exception {

qq_39939541的博客 2805

图像处理入门007:图像处理中的数学基础:线性代数与卷积

一种:把 OpenCV 当黑盒,调用,效果不对就乱调参数;另一种:理解每个像素是怎么被周围邻域"加权平均"的,理解核翻转、边界填充、stride 的含义。前者能干活,后者能解难题。一旦遇到自定义核(比如 ISP 上的锐化)、深度学习反向传播、医学图像重建,你就必须把卷积、相关、矩阵乘法这些基本功捡回来。线性代数三件套:向量点积、矩阵乘法、线性变换;2D 卷积的数学定义:核翻转、滑动窗口、边界填充。并手写一个,验证它与和的结果完全一致(误差 < 1e-9)。f∗gn∑m−∞∞f。

专注:太空算力、AI infra、异构调度、大模型成本工程 387

java的异常机制

java的异常机制详解

qq_983030560的博客 692

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java 异常机制总结

前言Java异常机制异常层次结构受查异常throws语句声明受查异常throws 抛出异常捕获异常try-catch块finally语句带资源的try语句分析堆栈轨迹元素 前言   本文是对《Java核心技术卷Ⅰ》(第十版)第七章异常部分(264-285)的学习总结,目的是记录自己的学习路径,以及方便日后查看、复习、补充。 Java异常机制   与大多数编程语言一样,Java提供了异常处理(...

大山喵写博客的地方 726

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

简述JAVA异常机制

JAVA异常机制体系以及异常处理 Java异常是Java提供的一种识别及响应错误的一致性机制。Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出。Java异常处理机制需要用...

qq_41583415的博客 1326

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java异常机制

异常与错误

qq_38738735的博客 204

28_2异常机制

2.异常 异常的概念 异常的分类 异常处理机制 – 面试题 异常处理的能力: 1.try…catch… 2.throws 3.throw

gangain的博客 1557

java异常机制_全面理解java异常机制

在理想状态下,程序会按照我们预想的步骤一步一步的执行,但是即使你是大牛,你也不可避免出错,所以java为我们提供了异常机制。本文将会从以下几个方面介绍java中的异常机制:异常机制的层次结构异常的处理过程抛出异常捕获异常异常机制的实现细节一、异常机制的层次结构在java程序设计语言中,所有的异常对象都是派生于Throwable类,一般情况下,如果java中内置的异常类不能满足需求,可以自定义异常类...

weixin_39887183的博客 127

JAVA异常(一)异常机制

一、异常的定义: 异常情形:是指阻止当前方法或作用域继续执行的问题。 二、异常的分类: JAVA异常最顶级的父类位:Throwable 其直接继承自Object类 其子类有二:Error,Exception Error:是程序中无法处理的错误,表示运行应用程序中出现严重的错误。此类错误一般表示代码运行时JVM出现问题。通常有Virtual MachineError(虚拟机运行错误),NoCla...

weixin_42040155的博客 446

异常机制的本质-异常机制是一种信息传递机制

异常机制的本质: 用冗余代码实现额外信息的传递: 异常机制的本质是异常机制代码的解释权: 作出解释即用冗余代码实现异常机制的额外逻辑; 1、异常信息的表达:包含什么:在哪里出的什么错误; 2、异常信息的传递:栈帧、长跳转; 3、异常的处理: /** * 抛出异常对象,对应代码:@thro...

diaoju3333的博客 219

Java异常处理机制

Java异常处理机制

一个初学java的博客 1202

异常处理机制

一、异常机制概述 1、异常机制包括的关键字 关键字 作用 try try块中编写业务处理代码 catch catch块中编写异常处理代码 finally finally块中一般用于物理资源的释放,此语句块总会被会被执行 throws 在方法签名中使用,声明该方法可能抛出的异常 throw 手动抛出一个具体的异常实例 2、语法结构 public void test()throws Exception{ try{ //可能出现异常的业务处理代码 throw new Ex

qq_47102228的博客 762

【C++】异常处理机制

异常是程序运行时出现的 “意外情况”(如除数为零、资源不足等)异常处理机制的核心:让程序的 “检测错误模块” 与 “处理错误模块” 解耦,无需知道对方细节即可协作。

HY3253531932的博客 1061

C++ 异常机制详解

C/C++教程C++中的异常处理机制可以帮助我们处理程序在运行时可能会遇到的异常情况,比如内存分配错误、文件打开失败等。当程序运行到某一处出现异常时,程序会立即跳转到相应的异常处理代码。C++中的异常处理使用try-catch语句实现,try语句块中包含可能抛出异常的代码,catch语句块用来捕获并处理异常。当程序执行到throw语句时,就会抛出一个异常,并跳转到最近的catch语句块处理异常。try {// 可能抛出异常的代码 } catch(exception & e) {// 处理异常 }

余识- 3257
上一篇: 面向对象
下一篇: 爬虫。。。
可爱软萌喵酱
博客等级 码龄5年 100粉丝 20原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值