Python异常处理体系1.Python内建异常体系结构The class hierarchy for built-in exceptions
isBaseException--SystemExit--KeyboardInterrupt--GeneratorExit--Exception--StopIterati on--StandardError--BufferError--ArithmeticError--FloatingPointError--OverflowError--Z eroDivisionError--AssertionError--AttributeError--EnvironmentError--IOError--OSError --WindowsErrorWindows--VMSErrorVMS--EOFError--ImportError--LookupError--Ind exError--KeyError--MemoryError--NameError--UnboundLocalError--ReferenceError--R untimeError--NotImplementedError--SyntaxError--IndentationError--TabError--SystemE rror--TypeError--ValueError--UnicodeError--UnicodeDecodeError--UnicodeEncodeErro r--UnicodeTranslateError--Warning--DeprecationWarning--PendingDeprecationWarning --RuntimeWarning--SyntaxWarning--UserWarning--FutureWarning--ImportWarning--U nicodeWarning--BytesWarning 2.捕获异常的方式方法一捕获所有的异常捕获异常的第一种方式捕获所有的异常tryab bc except Exceptiondataprint Exceptiondata输出local variablebreferenced before assignment--方法二采用traceback模块查看异常需要导入traceback模块捕获异常的第二种方式使用traceback查看异常tryab bc exceptprint traceback.print_exc输出Tracebackmost recent call lastFiletest.pyline 20in main ab UnboundLocalErrorlocal variablebreferenced before assignmen--方法三采用sys模块回溯最后的异常捕获异常的第三种方式使用sys模块捕获异常tryab _infoprint info print info0print info1输出UnboundLocalErrorlocal variablebreferenced before assignmentlocal variablebreferenced before
assignment--3.Python异常体系介绍Python的异常处理可以向用户准确反馈出错信息所有异常都是基类Exception的子类。自定义异常都是从基类Exception中继承。Python 自动将所有内建的异常放到内建命名空间中所以程序不必导入exceptions模块即可使用异常。可以使用的语句结构形式方式一使用tryexcept语句来捕获异常可以有无数个except语句来处理异常如果所有except语句都没捕获到则抛出异常到调用此方法的函数内处理直到系统的主函数来处理。使用except子句需要注意的事情就是多个except子句截获异常时如果各个异常类之间具有继承关系则子类应该写在前面否则父类将会直接截获子类异常。放在后面的子类异常也就不会执行到了。tryblock exceptexcpetiondata.block exceptexcpetiondata.block exceptexcpetiondata.block方式二当没有异常发生的时候执行else语句tryblock exceptexcpetiondata.block elseblock方式三finally语句不管有没有发生异常都将执行finally语句块。例如我们在python中打开一个文件进行读写操作我在操作过程中不管是否出现异常最终都是要把该文件关闭的。tryblock finallyblock方式四tryexceptfinally tryblock exceptblock finallyblock 4.引发异常raiseexceptiondata在Python中要想引发异常最简单的形式就是输入关键字raise 后跟要引发的异常的名称。异常名称标识出具体的类Python异常是那些类的对象。执行raise语句时Python会创建指定的异常类的一个对象。raise语句还可指定对异常对象进行初始化的参数。为此请在异常类的名称后添加一个逗号以及指定的参数或者由参数构成的一个元组。例tryraise MyError自己抛出一个异常except MyErrorprinta errorraise ValueErrorinvalid argument捕捉到的内容为typeVauleError messageinvalid argument 5.异常处理的一些其它用途除了处理实际的错误条件之外对于异常还有许多其它的用处。在标准Python库中一
syntaxerror是什么错误个普通的用法就是试着导入一个模块然后检查是否它能使用。导入一个并不存在的模块将引发一个ImportError异常。你可以使用
这种方法来定义多级别的功能――依靠在运行时哪个模块是有效的或支持多种平台即平台特定代码被分离到不同的模块中。你也能通过创建一个从内置的Exception类继承的类定义你自己的异常然后使用raise命令引发你的异常。如果你对此感兴趣请看进一步阅读的部分。下面的例子演示了如何使用异常支持特定平台功能。代码来自getpass模块一个从用户获得口令的封装模块。获得口令在UNIX、Windows和Mac OS平台上的实现是不同的但是这个代码封装了所有的不同之处。例支持特定平台功能Bind the name getpass to the appropriate function tryimport termiosTERMIOS except ImportErrortryimport msvcrt except ImportErrortryfrom EasyDialogs import AskPassword except ImportErrorgetpassdefault_getpass elsegetpassAskPassword elsegetpasswin_getpass elsegetpassunix_getpass termios是UNIX独有的一个模块它提供了对于输入终端的底层控制。如果这个模块无效因为它不在你的系统上或你的系统不支持它则导入失败Python引发我们捕捉的ImportError异常。OK我们没有termios 所以让我们试试msvcrt它是Windows独有的一个模块可以提供在Microsoft Visual C 运行服务中的许多有用的函数的一个API。如果导入失败Python会引发我们捕捉的ImportError异常。如果前两个不能工作我们试着从EasyDialogs导入一个函数它是Mac OS独有的一个模块提供了各种各样类型的弹出对话框。再一次如果导入失败Python会引发一个我们捕捉的ImportError异常。这些平
台特定的模块没有一个有效有可能因为Python已经移植到了许多不同的平台上了所以我们需要回头使用一个缺省口令输入函数这个函数定义在getpass模块中的别的地方。注意我们在这里所做的我们将函数default_getpass赋给变量getpass。如果你读了官方getpass文档它会告诉你getpass模块定义了一个getpass函数。它是这样做的通过绑定getpass到正确的函数来适应你的平台。然后当你调用getpass函数时你实际上调用了平台特定的函数是这段代码已经为你设置好的。你不需要知道或关心你的代码正运行在何种平台上只要调用getpass则它总能正确处理。一个pt块可以有一条else子句就像if语句。如果在try块中没有异常引发然后else子句被执行。在本例中那就意味着如果from EasyDialogs import AskPassword导入可工作所以我们应该绑定getpass到AskPassword函数。其它每个pt块有着相似的else子句当我们发现一个import 可用时就绑定getpass到适合的函数。6.自定义异常类继承Exception类及其子类。class MyErrorArithmeticErrorpass class MyError2Exceptionpass
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论