python3 try except or_Python基础10:try except异常处理详解
Pyt hon 提供了t ry except语句捕获并处理异常,该异常处理语句的基本语法结构如下:
try:
可能产⽣异常的代码块
except [(Error1, Error2, ...) [as e]]:
处理异常的代码块1
except [(Error3, Error4, ...) [as e]]:
处理异常的代码块2
该格式中,[] 括起来的部分可以使⽤,也可以省略;(Error1,Error2,...) 、(Error3,Error4,...) 表示各⾃的 except 块可以处理异常的具体类型;[as e] 表示将异常类型赋值给变量 e(⽅便在except 块中调⽤异常类型)。
注意,except 后⾯也可以不指定具体的异常名称,这样的话,表示要捕获所有类型的异常。
另外,从 try except 的基本语法格式可以看出,t ry 块仅有⼀个,但 except 代码块可以有多个,这是为了针对不同的异常类型提供不同的异常处理⽅式。当程序发⽣不同的意外情况时,会对应不同的异常类型,Pyt hon 解释器就会根据该异常类型来决定使⽤哪个except 块来处理该异常。
通过在try块后提供多个except 块可以⽆须在异常处理块中使⽤ if 判断异常类型,但依然可以针对不同的异常类型提供相应的处理逻辑,从⽽提供更细致、更有条理的异常处理逻辑。
try except 语句的执⾏流程如下:
⾸先执⾏ try 中的代码块,如果执⾏过程中出现异常,系统会⾃动⽣成⼀个异常对象,该异常对象会提交给 Pyt hon 解释器,此过程被称为引发异常。
当 Python 解释器收到异常对象时,会寻找能处理该异常对象的 except 块,如果找到合适的 except 块,则把该异常对象交给该 except 块处理,这个过程被称为捕获异常。如果 Pyt hon 解释器找不到捕获异常的 except 块,则程序运⾏终⽌,Python 解释器也将退出。
事实上,不管程序代码块是否处于 t ry 块中,甚⾄包括 except 块中的代码,只要执⾏该代码块时出现了异常,系统总会⾃动⽣成⼀个Error对象。如果程序没有为这段代码定义任何的except 块,则 Python 解释器⽆法找到处理该异常的 except 块,程序就会停⽌运⾏;反之,如果程序发⽣异常,并且该异常经 t ry 捕获并由 except 处理完成,则程序会继续执⾏。
举个例⼦:
try:
a = int (input ("输⼊被除数:"))
b = int (input ("输⼊除数:"))
c = a / b
print ("您输⼊的两个数相除的结果是:", c )
except (ValueError, Arit hmet icError):
print ("程序发⽣了数字格式异常、算术异常之⼀")
except :
print ("未知异常")
print ("程序继续运⾏")
程序运⾏结果为:
输⼊被除数:a
程序发⽣了数字格式异常、算术异常之⼀
程序继续运⾏
上⾯程序中,第 6 ⾏代码使⽤了(ValueError, Arit hmet icError)来指定所捕获的异常类型,这就表明该 except 块可以同时捕获这 2 种类型的异常;第 8 ⾏代码只有 except 关键字,并未指定具体要捕获的异常类型,这种省略异常类的 except 语句也是合法的,它表示可捕获所有类型的异常,⼀般会作为异常捕获的最后⼀个 except 块。
除此之外,由于try 块中引发了异常,并被 except 块成功捕获,因此程序才可以继续执⾏,才有了“程序继续运⾏”的输出结果。
访问异常信息
如果程序需要在 except 块中访问异常对象的相关信息,可以通过为 except 块添加as a来实现。当 Pyt hon 解释器决定调⽤某个 except 块来处理该异常对象时,会将异常对象赋值给except 块后的异常变量,程序即可通过该变量来获得异常对象的相关信息。
所有的异常对象都包含了如下⼏个常⽤属性和⽅法:
args:该属性返回异常的错误编号和描述字符串。
errno:该属性返回异常的错误编号。
st rerror:该属性返回异常的描述宇符串。
wit h_t raceback():通过该⽅法可处理异常的传播轨迹信息。
下⾯例⼦演示了程序如何访问异常信息:
def foo():
try:
fis = open("a.txt ");
except Except ion as e:
#访问异常的错误编号和详细信息
print (e.args)
#访问异常的错误编号
print (e.errno)
#访问异常的详细信息
print (e.strerror)
foo()
从上⾯程序可以看出,如果要访问异常对象,只要在单个异常类或异常类元组(多异常捕获)之后使⽤ as 再加上异常变量即可。
在 Pyt hon 的早期版本中,直接在单个异常类或异常类元组(多异常捕获)之后添加异常变量,中间⽤逗号隔开即可。上⾯程序调⽤了 Except ion 对象的 args 属性(该属性相当于同时返回 errno 属性和strerror属性)访问异常的错误编号和详细信息。运⾏上⾯程序,会看到如下运⾏结果:
(2, 'No such file or direct ory')
2
No such file or direct ory
从上⾯的运⾏结果可以看到,由于程序尝试打开的⽂件不存在,因此引发的异常错误编号为2,异常详细信息为:No such file or direct ory。
python3 try except or_Python基础10:try except异常处理详解相关推荐
- 对python3中pathlib库的Path类的使用详解
原文连接 https://www.jb51.net/article/148789.htm 1.调用库 ? 1 from pathlib import 2.创建Path对象 ? 1 2 3 4 5 ...
- python3库_对python3中pathlib库的Path类的使用详解
用了很久的os.path,今天发现竟然还有这么好用的库,记录下来以便使用. 1.调用库 from pathlib import 2.创建Path对象 p = Path('D:/python/1.py' ...
- [Python从零到壹] 八.数据库之MySQL和Sqlite基础知识及操作万字详解
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- 关于计算机应用基础问题,《计算机应用基础》习题及问题详解
<计算机应用基础>习题及问题详解 (17页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实用文档第一章 计算机基础知识填空题 ...
- get方法报空指针_C++基础教程之指针拷贝详解
C++基础教程之指针拷贝详解 指针是编程人员的梦魇,对C语言的开发者是如此,对C++的开发者也是如此.特别是在C++中,如果不注意处理类中的指针,非常容易出问题.如果朋友们不相信可以看看下面的代码: ...
- Java中大数据数组,Java基础学习笔记之数组详解
摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...
- Keras深度学习实战(1)——神经网络基础与模型训练过程详解
Keras深度学习实战(1)--神经网络基础与模型训练过程详解 0. 前言 1. 神经网络基础 1.1 简单神经网络的架构 1.2 神经网络的训练 1.3 神经网络的应用 2. 从零开始构建前向传播 ...
- Android 10.0 Activity启动详解(二)
Android 10.0 Activity启动详解(一) 我们在上一篇博客中已经介绍了关于Activity的一些基础概念.这一篇博客我们以Android 10.0的代码来分析Activity的启动流程 ...
- Python基础学习之 os 模块详解
Python基础学习之 os 模块详解 文章目录 Python基础学习之 os 模块详解 1. 路径操作 1.1 os.chdir(),切换当前工作目录: 1.2 os.getcwd(),返回工作目录 ...
最新文章
- szu 寒训 day#3 ST表 和 LCA问题 附例题 菜鸡解法
- Oracle 统计信息(1)
- SQL Tuning 基础概述01 - Autotrace的设定
- vb 访问远程计算机,vb 怎么访问远程电脑SQL SERVER数据库
- 腾讯云【人脸识别】服务的一次尝试(JAVA)
- SpringCloud Hoxton版微服务- Gateway网关
- C语言抽象类声明方法,抽象类 – 在C语言中隐藏实现
- oracle until freed,ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法...
- linux(CentOS)下Mrtg的安装詳解
- iOS中Navigation中添加自定义Button等UIView
- C#删掉了发给lua的对象造成lua实际的Obj无效,解决办法
- 给快播指一条生路:转型会员付费吧
- flutter插件出现英文
- 发微博利器 FaWave(发微)---- chrome扩展程序
- Raspberry Pi Zero W 安装配置
- Flume Kafka Channel使用案例
- java-net-php-python-13jspm珠宝销售网开题计算机毕业设计程序
- win10 桌面(Windows 资源管理器)卡死的根本解决办法
- php语言讲座,学习PHP语言的十大诀窍
- Activity生命周期详解及最佳实践
热门文章
- Understand Google file system paper
- Java的equals()和==的区别
- 读后感《习惯的力量》
- 人生总是起起落落落落落落...
- 二分+BFS——刺杀大使(洛谷 P1902)
- asp.net mysql所有数据库_asp.net 如何获取sql数据库所有列名称
- python中用于绘制各种图形的区域称作_Python--matplotlib绘图可视化知识点整理(示例代码)...
- 基于QGIS初探PostgreSQL的PostGIS插件,包括YUM和编译安装PostGIS
- 专栏丨MySQL 高频面试题解析
- MySQL 8.0 在关系数据库方面有这些新特性