Python try except异常处理详解(入门必读)

Python中,用tryexcept语句块捕获并处理异常,其基本语法结构如下所示:

try:
 可能产生异常的代码块except [ (Error1, Error2, ... ) [as e] ]:
 处理异常的代码块1except [ (Error3, Error4, ... ) [as e] ]:
 处理异常的代码块2except  [Exception]:
 处理其它异常12345678复制代码类型:[python]

该格式中,[]括起来的部分可以使用,也可以省略。其中各部分的含义如下:

(Error1,Error2,...)、(Error3,Error4,...):其中,Error1、Error2、Error3和Error4都是具体的异常类型。显然,一个except块可以同时处理多种异常。

[ase]:作为可选参数,表示给异常类型起一个别名e,这样做的好处是方便在except块中调用异常类型(后续会用到)。

[Exception]:作为可选参数,可以代指程序可能发生的所有异常情况,其通常用在最后一个except块。

从tryexcept的基本语法格式可以看出,try块有且仅有一个,但except代码块可以有多个,且每个except块都可以同时处理多种异常。

当程序发生不同的意外情况时,会对应特定的异常类型,Python解释器会根据该异常类型选择对应的except块来处理该异常。

tryexcept语句的执行流程如下:

1、首先执行try中的代码块,如果执行过程中出现异常,系统会自动生成一个异常类型,并将该异常提交给Python解释器,此过程称为捕获异常。

2、当Python解释器收到异常对象时,会寻找能处理该异常对象的except块,如果找到合适的except块,则把该异常对象交给该except块处理,这个过程被称为处理异常。如果Python解释器找不到处理异常的except块,则程序运行终止,Python解释器也将退出。

事实上,不管程序代码块是否处于try块中,甚至包括except块中的代码,只要执行该代码块时出现了异常,系统都会自动生成对应类型的异常。但是,如果此段程序没有用try包裹,又或者没有为该异常配置处理它的except块,则Python解释器将无法处理,程序就会停止运行;反之,如果程序发生的异常经try捕获并由except处理完成,则程序可以继续执行。

举个例子:

try:
 a = int(input("输入被除数:"))
 b = int(input("输入除数:"))
 c = a / b
 print("您输入的两个数相除的结果是:", c )except (ValueError, ArithmeticError):
 print("程序发生了数字格式异常、算术异常之一")except :
 print("未知异常")
print("程序继续运行")12345678910复制代码类型:[python]

程序运行结果为:

输入被除数:a
程序发生了数字格式异常、算术异常之一
程序继续运行123复制代码类型:[python]

上面程序中,第6行代码使用了(ValueError,ArithmeticError)来指定所捕获的异常类型,这就表明该except块可以同时捕获这2种类型的异常;第8行代码只有except关键字,并未指定具体要捕获的异常类型,这种省略异常类的except语句也是合法的,它表示可捕获所有类型的异常,一般会作为异常捕获的最后一个except块。

除此之外,由于try块中引发了异常,并被except块成功捕获,因此程序才可以继续执行,才有了“程序继续运行”的输出结果。

获取特定异常的有关信息

通过前面的学习,我们已经可以捕获程序中可能发生的异常,并对其进行处理。但是,由于一个except可以同时处理多个异常,那么我们如何知道当前处理的到底是哪种异常呢?

其实,每种异常类型都提供了如下几个属性和方法,通过调用它们,就可以获取当前处理异常类型的相关信息:

args:返回异常的错误编号和描述字符串;

str(e):返回异常信息,但不包括异常信息的类型;

repr(e):返回较全的异常信息,包括异常信息的类型。

举个例子:

try: 1/0except Exception as e: # 访问异常的错误编号和详细信息
 print(e.args)
 print(str(e))
 print(repr(e))1234567复制代码类型:[python]

输出结果为:

('division by zero',)
division by zero
ZeroDivisionError('division by zero',)123复制代码类型:[python]

除此之外,如果想要更加详细的异常信息,可以使用traceback模块。有兴趣的读者,可自行查阅资料学习。

从程序中可以看到,由于except可能接收多种异常,因此为了操作方便,可以直接给每一个进入到此except块的异常,起一个统一的别名e。

在Python2.x的早期版本中,除了使用ase这个格式,还可以将其中的as用逗号(,)代替。

(0)

相关推荐

  • 跟光磊学Python开发

    跟光磊学Python开发-异常机制 原创ittimeline2021-02-15 17:21:45 异常概述 异常指的是不正常,也就是程序在执行过程中发生了不可预知的问题,导致程序崩溃. Python ...

  • Python异常处理

    Python异常处理,Python开发工程师们在工作的过程中经常会遇到这样或者那样的问题,本篇文章给读者们分享一下Python异常处理,对Python开发技术感兴趣的小伙伴随小编来了解一下吧. 定义: ...

  • 一文读懂Python中的异常处理

    异常处理语句 try...excpet...finally 实例代码 def div(a, b):    try:        print(a / b)    except ZeroDivision ...

  • Python循环结构中else用法(入门必读)

    Python 中,无论是 while 循环还是 for 循环,其后都可以紧跟着一个 else 代码块,它的作用是当循环条件为 False 跳出循环时,程序会最先执行 else 代码块中的代码. 以 w ...

  • Python绘图Turtle库详解

    Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...

  • 基于python图书馆管理系统设计实例详解

    写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担 ...

  • python 通关字符串操作方法详解-大量案例

    给IT入门加星标,提升编程技能 IT入门(ID:learncode)整理  原作者:战争热诚 字符串序列用于表示和存储文本,python中字符串是不可变对象.字符串是一个有序的字符的集合,用于存储和表 ...

  • Python模块——os模块详解

    本文大纲 os模块是Python中整理文件和目录最为常用的模块,该模块提供了非常丰富的方法用来处理文件和目录.本着只讲最有用的态度,下方我将os模块中一些我经常用的的方法,给大家详细列举出来了,希望减 ...

  • python之OS模块详解

    python之OS模块详解常见函数列表123456789101112131415161718192021222324252627282930313233os.sep:取代操作系统特定的路径分隔符os. ...

  • 使用OpCode绕过Python沙箱的方法详解

    0x01 OpCode opcode又称为操作码,是将python源代码进行编译之后的结果,python虚拟机无法直接执行human-readable的源代码,因此python编译器第一步先将源代码进 ...

  • Python class:定义类(入门必读)

    前面章节中已经提到,类仅仅充当图纸的作用,本身并不能直接拿来用,而只有根据图纸造出的实际物品(对象)才能直接使用.因此,Python程序中类的使用顺序是这样的: 1.创建(定义)类,也就是制作图纸的过 ...

  • 上市公司研究实战:27个行业81个案例详解 (入门到精通)

    行业研究与公司分析是金融圈的必备技能 投研是所有投融资活动的第一步 不论是买方(公募or私募)和卖方(券商) 不论是二级市场还是一级市场 对行业/公司以框架性的逻辑来剖析 研究其过去/现状/未来, 其 ...