Python异常处理体系简介_第1页
Python异常处理体系简介_第2页
Python异常处理体系简介_第3页
Python异常处理体系简介_第4页
Python异常处理体系简介_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品文档你我共享 Python异常处理体系进行简 Python的异常处理能力是很强大的,可向用户准确反馈出错信息。本文将对 单介绍。 Python内建异常体系结构 The class hierarchy for built-in exceptions is: BaseException +- SystemExit | +- KeyboardInterrupt +- GeneratorExit +- Exception +- StopIteration +- StandardError |+- BufferError |+- ArithmeticError |+- FloatingPointEr

2、ror |+- OverflowError |+- ZeroDivisionError |+- AssertionError |+- AttributeError |+- EnvironmentError AAAAAA |+- IOError |+- WindowsError (Windows) |+- VMSError (VMS) |+- EOFError |+- ImportError |+- LookupError I | +- KeyError +- MemoryError +- NameError |+- UnboundLocalError |+- ReferenceError |+

3、- RuntimeError |+- NotlmplementedError |+- SyntaxError |+- IndentationError |+- TabError |+- SystemError |+- TypeError |+- ValueError |+- UnicodeError |+- UnicodeEncodeError |+- UnicodeTranslateError +- Warning +- DeprecationWarning +- PendingDeprecationWarning +- RuntimeWarning +- SyntaxWarning +-

4、UserWarning +- FutureWarning +- ImportWarning +- UnicodeWarning +- BytesWarning 捕获异常的方式 方法一:捕获所有的异常 捕获异常的第一种方式,捕获所有的异常 try: except Exception,data: print Exception,:,data 输出:v type exceptions.Exception: local variableb referenced before assignment 方法二:采用traceback模块查看异常,需要导入traceback模块 捕获异常的第二种方式,使用tr

5、aceback 查看异常 except: print traceback.print_exc() 输出: Traceback (most recent call last): File test.py, line 20, in main UnboundLocalError:local variable b referenced before assignmen 方法三:采用sys模块回溯最后的异常 捕获异常的第三种方式,使用sys模块捕获异常 b = c except: info = sys.exc_info() print info printinfo0 printinfo1 输出: (,

6、UnboundLocalError(local variable b referenced before assignment,), ) Python异常体系介绍 Python的异常处理可以向用户准确反馈出错信息,所有异常都是基类Exception的子 类。自定义异常都是从基类Exception中继承。Python自动将所有内建的异常放到内建命 名空间中,所以程序不必导入exceptions模块即可使用异常。 可以使用的语句结构形式: 方式一:使用try,except语句来捕获异常,可以有无数个except语句来处理异常,如果 所有except语句都没捕获到,则抛出异常到调用此方法的函数内处理

7、,直到系统的主函数来 处理。 使用except子句需要注意的事情,就是多个except子句截获异常时,如果各个异常类 之间具有继承关系,则子类应该写在前面,否则父类将会直接截获子类异常。放在后面的子 类异常也就不会执行到了。 try 方式二:当没有异常发生的时候执行else语句 try: block 1 except excpetion,data.: block else: block 方式三:fin ally语句,不管有没有发生异常都将执行fin ally语句块 例如我们在python中打开一个文件进行读写操作,我在操作过程中不管是否出现异常, 最终都是要把该文件关闭的。 方式四: try,

8、except,fi nally try: block except: block finally: block 引发异常 raise exception,data 在Python中,要想引发异常,最简单的形式就是输入关键字raise ,后跟要引发的异常 的名称。 异常名称标识出具体的类:Python异常是那些类的对象。执行raise语句时,Python会创 建指定的异常类的一个对象。 raise语句还可指定对异常对象进行初始化的参数。为此,请在异常类的名称后添加一 个逗号以及指定的参数(或者由参数构成的一个元组)。 except MyError: print a error ValueErro

9、r, invalidargument 捕捉到的内容为: 精品文档你我共享 type = VauleError message = invalid argument 异常处理的一些其它用途 除了处理实际的错误条件之外,对于异常还有许多其它的用处。在标准Python库中 一个普通的用法就是试着导入一个模块,然后检查是否它能使用。 导入一个并不存在的模块将引发一个ImportError异常。你可以使用这种方法来定义 多级别的功能一一依靠在运行时哪个模块是有效的,或支持多种平台(即平台特定代码被分 离到不同的模块中)。 你也能通过创建一个从内置的Exception类继承的类定义你自己的异常,然后使用r

10、 aise命令引发你的异常。如果你对此感兴趣,请看进一步阅读的部分。 下面的例子演示了如何使用异常支持特定平台功能。代码来自getpass模块,一个从 用户获得口令的封装模块。获得口令在UNIX、Windows和Mac OS平台上的实现是不 同的,但是这个代码封装了所有的不同之处。 例支持特定平台功能 # Bind the name getpass to the appropriate function try: import termios, TERMIOS except ImportError: except ImportError: getpass = default_getpass e

11、lse: getpass = unix_getpass termios是UNIX独有的一个模块,它提供了对于输入终端的底层控制。 如果这个模块无效(因为它不在你的系统上,或你的系统不支持它),则导入失败,Pyt hon引发我们捕捉的ImportError异常。 OK,我们没有termios,所以让我们试试msvcrt,它是 Windows 独有的一个模块, 可以提供在 Microsoft Visual C+运行服务中的许多有用的函数的一个API。如果导入失 败, Python会引发我们捕捉的ImportError异常。 如果前两个不能工作,我们试着从EasyDialogs 导入一个函数,它是

12、Mac OS独有 的一个模块,提供了各种各样类型的弹出对话框。再一次,如果导入失败,Python会引发 一个我们捕捉的ImportError异常。 这些平台特定的模块没有一个有效(有可能,因为Python已经移植到了许多不同的平 台上了),所以我们需要回头使用一个缺省口令输入函数(这个函数定义在 getpass模块中 的别的地方)。注意我们在这里所做的:我们将函数default_getpass 赋给变量getpass 。 AAAAAA 如果你读了官方getpass文档,它会告诉你getpass模块定义了一个getpass函数。它 是这样做的:通过绑定getpass到正确的函数来适应你的平台。然后当你调用 getpass 函数时,你实际上调用了平台特定的函数,是这段代码已经为你设置好的。你不需要知道或 关心你的代码正运行在何种平台上;只要调用getpass,则它总能正确处理。 一个try.except块可以有一条 else子句,就像if语句。如果在 try块中没有异常 引发,然后 else子句被执行。在本例中,那就意味着如果from EasyDial

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论