Python异常继承关系和自定义异常实现代码实例
这篇文章主要介绍了Python异常继承关系和自定义异常实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍python中异常的继承关系,及如何自定义异常
1.异常的继承关系
BaseException#所有异常的基类 +--SystemExit#解释器请求退出 +--KeyboardInterrupt用户中断执行(通常是输入^C) +--GeneratorExit#生成器(generator)发生异常来通知退出 +--Exception#常规异常的基类 +--StopIteration#迭代器没有更多的值 +--StandardError#标准错误 |+--BufferError |+--ArithmeticError ||+--FloatingPointError ||+--OverflowError ||+--ZeroDivisionError |+--AssertionError |+--AttributeError |+--EnvironmentError ||+--IOError ||+--OSError ||+--WindowsError(Windows) ||+--VMSError(VMS) |+--EOFError |+--ImportError |+--LookupError ||+--IndexError ||+--KeyError |+--MemoryError |+--NameError ||+--UnboundLocalError |+--ReferenceError |+--RuntimeError ||+--NotImplementedError |+--SyntaxError ||+--IndentationError ||+--TabError |+--SystemError |+--TypeError |+--ValueError |+--UnicodeError |+--UnicodeDecodeError |+--UnicodeEncodeError |+--UnicodeTranslateError +--Warning +--DeprecationWarning +--PendingDeprecationWarning +--RuntimeWarning +--SyntaxWarning +--UserWarning +--FutureWarnin +--ImportWarnin +--UnicodeWarnin +--BytesWarning
2.自定义异常
#自定义异常需要继承Exception classMyException(Exception): def__init__(self,*args): self.args=args if__name__=='__main__': try: raiseMyException("自定义异常") exceptMyExceptionase: printe
3.异常捕获
#示例 str1='abc' try: int(str1) exceptIndexErrorase: printe exceptKeyErrorase: printe exceptValueErrorase: printe else: print'try内正常处理' finally: print'无论异常与否,都会执行我'
4.主动触发异常
#raisexxx deftest_zero(num): try: ifnum==0: raiseValueError('参数错误') returnnum exceptExceptionase: printe test_zero(0)
5.采用traceback模块查看异常
异常发生时,Python能“记住”引发的异常以及程序的当前状态。
Python维护着traceback(跟踪)对象,其中含有异常发生时与函数调用堆栈有关的信息。
异常可能在一系列嵌套较深的函数调用中引发。
程序调用每个函数时,Python会在“函数调用堆栈”的起始处插入函数名。一旦异常被引发,Python会搜索一个相应的异常处理程序。如果当前函数中没有异常处理程序,当前函数会终止执行,Python会搜索当前函数的调用函数,并以此类推,直到发现匹配的异常处理程序,或者Python抵达主程序为止。这一查找合适的异常处理程序的过程称为“堆栈辗转开解”(StackUnwinding)。
解释器一方面维护着与放置堆栈中的函数有关的信息,另一方面也维护着与已从堆栈中“辗转开解”的函数有关的信息。
#示例 defdiv(num1,num2): try: result=num1/num2 returnresult exceptExceptionase: traceback.print_exc() printdiv(1,0)
#执行结果 Traceback(mostrecentcalllast): None File"F:/Technology-20161005/python/python_project/demo/exceptiondemo/exceptiondemo.py",line17,indiv result=num1/num2 ZeroDivisionError:integerdivisionormodulobyzero
#可以将异常信息写到文件中 traceback.print_exc(file=open('1.txt','w+'))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。