Python异常的处理记录
Posted 区块链散户一枚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python异常的处理记录相关的知识,希望对你有一定的参考价值。
参考资料来至:PythonCookbook
首先要知道,所有的异常事一个类。
如果一个单独的代码块处理所有不同的异常,可以将它们归组到一个元祖中。
from urllib.error import URLError try: object.get_url(url) except (URLError, ValueError, SocketTimeout): object.remove_url(url)
这个错误元祖(URLError, ValueError, SocketTimeout)捕获到都会执行object.remove_url(url)
如果对一个单独的采取不同的处理方法,可以将其放入一个单独的except中
try: object.get_url(url) except (URLError, ValueError): object.remove_url(url) except SocketTimeout: object.other_do(url)
有许多归组为继承体系,对于这样的异常,可以通过指定一个基类来捕获所有异常。
try: f = open(‘a.txt‘) except (FileNotFoundError, PermissionError): ... try: f = open(‘a.txt‘) except OSError: ... # 查下此类下面的子类 print(OSError.__subclasses__()) print()
# 查看继承表 print(FileNotFoundError.__mro__)
[<class ‘ConnectionError‘>, <class ‘BlockingIOError‘>, <class ‘ChildProcessError‘>, <class ‘FileExistsError‘>,
<class ‘FileNotFoundError‘>, <class ‘IsADirectoryError‘>, <class ‘NotADirectoryError‘>, <class ‘InterruptedError‘>,
<class ‘PermissionError‘>, <class ‘ProcessLookupError‘>, <class ‘TimeoutError‘>, <class ‘io.UnsupportedOperation‘>, <class ‘signal.ItimerError‘>] (<class ‘FileNotFoundError‘>, <class ‘OSError‘>, <class ‘Exception‘>, <class ‘BaseException‘>, <class ‘object‘>)
书中不严谨的地方事,明显OSError包含的错误类型更加多。
我们还可以通过as e,这个e就是捕获到错误的实例,实例的话就应该有一堆属性,你也可以通过type(e)的方式查看e的类型,便于精准捕获。
其中的error属性可以捕获到错误的代码。
except向下执行捕获到合适的异常,下面的except就不会执行。
try: f = open(‘a.txt‘) except OSError as e:
print(dir(e)) print(‘OSError‘) # 这个肯定不会执行,应该OSError是FileNotFoundError的父类,它把包含它的所有异常都捕获了 except FileNotFoundError: print(‘FileNotFoundError‘)
下面上一下OSError对象的属性
[‘__cause__‘, ‘__class__‘, ‘__context__‘, ‘__delattr__‘, ‘__dict__‘,
‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘,
‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__le__‘, ‘__lt__‘, ‘__ne__‘, ‘__new__‘,
‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__setstate__‘, ‘__sizeof__‘, ‘__str__‘,
‘__subclasshook__‘, ‘__suppress_context__‘, ‘__traceback__‘, ‘args‘, ‘characters_written‘, ‘errno‘, ‘filename‘, ‘filename2‘, ‘strerror‘, ‘with_traceback‘]
捕获所有的异常
try: ... # 一般错误这个够用了 except Exception as e: ... # 这个是错误的祖宗 except BaseException as e: ...
除了SystemExit,KeyboardInterrupt,和GeneratorExit之外,Exception都能捕获
以上是关于Python异常的处理记录的主要内容,如果未能解决你的问题,请参考以下文章