python实用教程 第九章 异常处理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9.3 抛出异常
• Python使用raise语句抛出一个指定的异常。我们可以使用一个类 (应该是Exception的子类)或者实例参数调用raise语句来引发异 常。使用类时,程序会自动创建实例。
• 如果你只想知道这是否抛出了一个异常,并不想去处理它,那使 用一个简单的raise语句就可以再次把它抛出。如下示例:
9.2 异常化解
• 出了异常怎么办呢?
• 就如乘坐的异常过山车,当在运行过程中停止时,乘客可以通过 自己的才智让过山车运行起来。
• 程序也一样,作为程序开发人员,谁都不想让自己写出来的代码 有问题,但这几乎是不可能的。好在编写程序的前辈们经过不断 积累与思考,创造了不少好方法处理程序中的异常, Python中, 异常最简单的化解方式是使用try语句。
第九章 异常处理
• 前面章节很多程序的执行中,经常会碰到程序执行过程中没有得 到预期结果的情况。对于程序运行过程中出现的不正常,有时称 为错误,有时称为异常,也有时说程序没有按预期运行,从本章 开始将有一个统一的称谓——异常。
• 本章将带领读者学习如何处理各种异常,以及创建和自定义异常。
• Python快乐学习班的同学参观完对象动物园后,由导游带领来到 了异常过山车入口。此处的异常过山车坐起来非常刺激,乘坐异 常过山车的过程中,过山车随时都可能停下来,有一些是正常的 停止,也会有一些在未预知的情况下停止,但只要过山车上的乘 客发挥自己的聪明才智,就有办法让停止的过山车动起来。听起 来很刺激吧,现在开始开启异常过山车之旅。
• try:
• <语句>
#运行别的代码
• except <名字1>:
• <语句>
#如果在try部分引发了name1异常
• except <名字2>,<数据>:
• <语句>
#如果引发了name2异常,获得附加数据
• try语句按照如下方式工作: • 首先执行try子句(在关键字try和关键字except之间的语句);如
• def exp_exception(x,y): • try: • a=x/y • print('a=', a) • return a • except Exception: • print('程序出现异常,异常信息:被除数为0') • • exp_exception(2, 0)
• 程序在执行过程中,try语句块中的语句在执行时发生异常,程序最后 执行的是except子句。因为如果语句正常,应该输出“a=”的形式, 但实际输出的是except子句中的打印语句的内容。
时,经常会遇到程序执行报错的问题,使程序不能得到预期结果, 如NameError、SyntaxError、TypeError、ValueError等,这些都是异 常。 • 这节我们会专门介绍异常。
• 异常是一个事件,该事件会在程序执行过程中发生,影响程序的 正常执行。一般情况下,在Python无法正常处理程序时就会发生 异常。
• >>> try:
•
raise NameError('This is NameError')
• except NameError:
•
ຫໍສະໝຸດ Baidu
print('An exception happened!') #后面不加raise
•
• An exception happened! #若不加raise,输出对应字符就结束
• 异常是Python的对象,表示一个错误。当Python脚本发生异常时, 需要捕获并处理所有异常,否则程序会终止执行。就如乘坐过山 车,有任何让过山车在运行过程中停下的异常因素都需要排除, 否则难以保证乘客的安全。
• 在Python中,异常属于类的实例,这些实例可以被引用,并且可 以用很多种方法进行捕捉,使得异常可以用一些友好的方式进行 化解,而不是简单粗暴的让整个程序停止。
• try语句的语法格式如下:
• try: • <语句> #运行别的代码 • except <名字>: • <语句> #如果在try部份引发了异常
• try语句的工作原理是,开始一个try语句后,Python就在当前程序 的上下文中做标记,当出现异常时就可以回到做标记的地方。
• 如果当try后的语句执行时发生异常,程序就跳回到try并执行 except子句,异常处理完毕,控制流就通过整个try语句(除非在 处理异常时又引发新的异常)。如果不想在发生异常时结束程序, 只需在try语句块中捕获异常即可。
果try子句执行没有发生异常,忽略except子句,try子句执行后结 束;如果在执行try子句的过程中发生异常,try子句余下的部分就 会被忽略;如果异常的类型和except之后的名称相符,对应的 except子句就会被执行,最后执行try语句之后的代码。如果抛出 的异常没有与任何except匹配,那这个异常就会传递到上层的try 语句中。一个try语句可能包含多个except子句,分别处理不同的 异常,但最多只有一个分支会被执行。 • 处理程序只针对对应try子句中的异常进行处理,而不会处理其他 异常语句中的异常。
• >>> try:
•
raise NameError('This is NameError')
• 在程序执行过程中,如果没有将异常化解,异常就会被“传播”到调 用的函数中。如果在调用的函数中依然没有化解异常,异常就会继续 “传播”,直到程序的最顶层。
• 在实际应用中,经常会遇到需要处理多个异常的情况,对于多个异常 该怎么化解呢?
• Python支持在一个try/except语句中处理多个异常,语法格式如下:
9.1 异常定义
• 在本节开始之前,先看看如下程序:
• >>> print(hello,world) • Traceback(most recent call last): • File "<pyshell#12>", line 1, in <module> • print(hello,world) • NameError: name 'hello' is not defined • 对于Python初学者,在Python的学习过程中,当编写的代码执行