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异常处理详解相关推荐

  1. 对python3中pathlib库的Path类的使用详解

    原文连接   https://www.jb51.net/article/148789.htm 1.调用库 ? 1 from pathlib import 2.创建Path对象 ? 1 2 3 4 5 ...

  2. python3库_对python3中pathlib库的Path类的使用详解

    用了很久的os.path,今天发现竟然还有这么好用的库,记录下来以便使用. 1.调用库 from pathlib import 2.创建Path对象 p = Path('D:/python/1.py' ...

  3. [Python从零到壹] 八.数据库之MySQL和Sqlite基础知识及操作万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. 关于计算机应用基础问题,《计算机应用基础》习题及问题详解

    <计算机应用基础>习题及问题详解 (17页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实用文档第一章 计算机基础知识填空题 ...

  5. get方法报空指针_C++基础教程之指针拷贝详解

    C++基础教程之指针拷贝详解 指针是编程人员的梦魇,对C语言的开发者是如此,对C++的开发者也是如此.特别是在C++中,如果不注意处理类中的指针,非常容易出问题.如果朋友们不相信可以看看下面的代码: ...

  6. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

  7. Keras深度学习实战(1)——神经网络基础与模型训练过程详解

    Keras深度学习实战(1)--神经网络基础与模型训练过程详解 0. 前言 1. 神经网络基础 1.1 简单神经网络的架构 1.2 神经网络的训练 1.3 神经网络的应用 2. 从零开始构建前向传播 ...

  8. Android 10.0 Activity启动详解(二)

    Android 10.0 Activity启动详解(一) 我们在上一篇博客中已经介绍了关于Activity的一些基础概念.这一篇博客我们以Android 10.0的代码来分析Activity的启动流程 ...

  9. Python基础学习之 os 模块详解

    Python基础学习之 os 模块详解 文章目录 Python基础学习之 os 模块详解 1. 路径操作 1.1 os.chdir(),切换当前工作目录: 1.2 os.getcwd(),返回工作目录 ...

最新文章

  1. szu 寒训 day#3 ST表 和 LCA问题 附例题 菜鸡解法
  2. Oracle 统计信息(1)
  3. SQL Tuning 基础概述01 - Autotrace的设定
  4. vb 访问远程计算机,vb 怎么访问远程电脑SQL SERVER数据库
  5. 腾讯云【人脸识别】服务的一次尝试(JAVA)
  6. SpringCloud Hoxton版微服务- Gateway网关
  7. C语言抽象类声明方法,抽象类 – 在C语言中隐藏实现
  8. oracle until freed,ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法...
  9. linux(CentOS)下Mrtg的安装詳解
  10. iOS中Navigation中添加自定义Button等UIView
  11. C#删掉了发给lua的对象造成lua实际的Obj无效,解决办法
  12. 给快播指一条生路:转型会员付费吧
  13. flutter插件出现英文
  14. 发微博利器 FaWave(发微)---- chrome扩展程序
  15. Raspberry Pi Zero W 安装配置
  16. Flume Kafka Channel使用案例
  17. java-net-php-python-13jspm珠宝销售网开题计算机毕业设计程序
  18. win10 桌面(Windows 资源管理器)卡死的根本解决办法
  19. php语言讲座,学习PHP语言的十大诀窍
  20. Activity生命周期详解及最佳实践

热门文章

  1. Understand Google file system paper
  2. Java的equals()和==的区别
  3. 读后感《习惯的力量》
  4. 人生总是起起落落落落落落...
  5. 二分+BFS——刺杀大使(洛谷 P1902)
  6. asp.net mysql所有数据库_asp.net 如何获取sql数据库所有列名称
  7. python中用于绘制各种图形的区域称作_Python--matplotlib绘图可视化知识点整理(示例代码)...
  8. 基于QGIS初探PostgreSQL的PostGIS插件,包括YUM和编译安装PostGIS
  9. 专栏丨MySQL 高频面试题解析
  10. MySQL 8.0 在关系数据库方面有这些新特性