Python3内置异常

Python Standard Library based on Python 3.7.3 https://docs.python.org/3/library/

Python标准库 - 内置异常
Link: [https://docs.python.org/3/library/exceptions.html#built-in-exceptions
说明 print 后的 # 注释为输出和相关说明,包含所有 Python3.7.3 官方文档中的内置异常
部分异常未代码实现测试
异常基本操作 可参考 http://www.runoob.com/python3/python3-errors-execptions.html
GitHub Code : Built-in Exceptions.py
目录链接:https://www.jianshu.com/p/e1e201bea601
Exception hierarchy 异常层次结构 Python3内置异常
文章图片
异常层次结构.png
Exception hierarchy End
基类 以下异常主要用作其他异常的基类。
exception BaseException
# exception BaseException ''' 所有内置异常的基类,但并不意味这能被用户自定义类直接继承 ''' # exception BaseException End

exception Exception
# exception Exception ''' 所有内置的,非系统退出的异常都派生自此类。所有用户定义的异常也应该从该类派生。 ''' # exception Exception End

exception ArithmeticError
# exception ArithmeticError ''' 针对各种算术错误引发的内置异常的基类:OverflowError,ZeroDivisionError,FloatingPointError。 ''' # exception ArithmeticError End

exception BufferError
# exception BufferError ''' 当不能进行缓冲相关操作引发。 ''' # exception BufferError End

exception LookupError
# exception LookupError ''' 当映射或序列上使用的键或索引无效时引发的异常的基类:IndexError,KeyError。这可以通过codecs.lookup()直接引发。 ''' # exception LookupError End

基类 End
具体异常 以下异常是常常被触发的异常
exception AssertionError
''' @Description: 当assert语句失败时触发。 @Param: @Return: ''' # exception AssertionError try: assert( -1 > 0 ) except AssertionError: print("exception AssertionError Test")# exception AssertionError Test # exception AssertionError End

exception AttributeError
''' @Description: 当属性引用(参见 https://docs.python.org/3/reference/expressions.html#attribute-references )或赋值失败时引发。 (当一个对象根本不支持属性引用或属性赋值时,会引发TypeError。) @Param: @Return: ''' # exception AttributeError class A: def __init__(self,x): self.x = x a = A(5) print(a.x)# 5 try: print(a.y) except AttributeError: print("exception AttributeError Test")# exception AttributeError Test # exception AttributeError End

exception EOFError
''' @Description: 当input()函数在没有读取任何数据的情况下达到文件结束条件(EOF)时引发。 @Param: @Return: ''' # exception EOFError try: s = input('ctrl+d to raise EOFError:\r\n') except EOFError: print("exception EOFError Test")# exception EOFError Test # exception EOFError End

exception FloatingPointError
''' @Description: 目前尚未使用。 @Param: @Return: ''' # exception FloatingPointError # exception FloatingPointError End

exception GeneratorExit
''' @Description: 当发generator或coroutine关闭时抬起; 请参阅generator.close()和coroutine.close()。 它直接继承自BaseException而不是Exception,因为它在技术上不是错误。 @Param: @Return: ''' # exception GeneratorExit # 参看 https://stackoverflow.com/questions/30862196/generatorexit-in-python-generator def myGenerator(n): while n > 0: try: yield n except GeneratorExit: print("exception GeneratorExit Test") n -= 1 gen = myGenerator(1) print(next(gen))# exception GeneratorExit Test del gen # exception GeneratorExit End

exception ImportError
''' @Description: 导入语句尝试加载模块遇到问题时触发,或者 当 “from list” 在 from ... import中有个名称没有时触发 @Param: @Return: ''' # exception ImportError try: from sys import nofunc except ImportError: print("exception ImportError Test") # exception ImportError Test # exception ImportError End

exception ModuleNotFoundError
''' @Description: ImportError的子类,当无法找到模块时由import触发,或者在sys.modules没找到时也会触发。 @Param: @Return: ''' # exception ModuleNotFoundError try: import Module except ModuleNotFoundError: print("exception ModuleNotFoundError Test") # exception ModuleNotFoundError Testtry: from sys.modules import nofunc except ModuleNotFoundError: print("exception ModuleNotFoundError Test") # exception ModuleNotFoundError Test # exception ModuleNotFoundError End

exception IndexError
''' @Description: 当序列下标超出范围时触发,切片索引被默默截断以落在允许的范围内; 如果索引不是整数,则会引发TypeError。 @Param: @Return: ''' # exception IndexError listtmp = [0,1,2,3,4] try: listtmp[6] except IndexError: print("exception IndexError Test")# exception IndexError Testtry: listtmp[0.1] except TypeError: print("exception TypeError Test")# exception TypeError Test # exception IndexError End

exception KeyError
''' @Description: 当一个map或者dict的key没有在key的集合中时触发 @Param: @Return: ''' # exception KeyError dicttmp = {'a':1,'b':2} try: print(dicttmp['a']) # 1 print(dicttmp['c']) except KeyError: print("exception KeyError Test")# exception KeyError Test # exception KeyError End

exception KeyboardInterrupt
''' @Description: 当用户点击中断键(通常是Control-C或Delete)时触发,在执行期间,定期检查中断。 该异常继承自BaseException,以免被捕获Exception的代码意外捕获,从而阻止解释器退出。 @Param: @Return: ''' # exception KeyboardInterrupt try: s = input('ctrl+c to raise KeyboardInterrupt:\r\n') except KeyboardInterrupt: print("exception KeyboardInterrupt Test")# exception KeyboardInterrupt Test # exception KeyboardInterrupt End

exception MemoryError
''' @Description: 当一个操作耗尽内存但是情况仍然可能被挽救(通过删除一些对象)时触发,关联值是一个字符串,表示内存中耗尽了哪种(内部)操作。 由于底层的内存管理架构(C的malloc()函数),解释器可能无法始终从这种情况中完全恢复; 然而,它会引发异常,以便可以打印堆栈回溯,以防出现失控程序。 @Param: @Return: ''' # exception MemoryError from sys import getsizeof try: a = [0] * 1024 * 1024 * 1024 print(getsizeof(a)) except MemoryError: print("exception MemoryError Test")# exception MemoryError Test # exception MemoryError End

exception NameError
''' @Description: 当找不到局部或全局名称时触发,这仅适用于不合格的名称。关联的值是包含无法找到的名称的错误消息。 @Param: @Return: ''' # exception NameError try: print(noname) except NameError: print("exception NameError Test")# exception NameError Test # exception NameError End

exception NotImplementedError
''' @Description: 此异常派生自RuntimeError。 在用户定义的基类中,抽象方法在需要派生类重写方法时触发 @Param: @Return: ''' # exception NotImplementedErrorclass ClassDemo(object): def func(self): raise NotImplementedErrorclass ChildClassDemo(ClassDemo): def funcChild(self): print('def funcChild(self):')try: demo = ChildClassDemo() demo.funcChild() demo.func() except NotImplementedError: print("exception NotImplementedError Test") # exception NotImplementedError Test # exception NotImplementedError End

OSError([arg])
''' @Description: exception OSError([arg]) exception OSError(errno, strerror[, filename[, winerror[, filename2]]]) 当系统函数返回与系统相关的错误时会引发此异常,包括I / O失败,例如“找不到文件”或“磁盘已满”(不是非法参数类型或其他偶然错误)。 构造函数的第二种形式,属性默认为None @Param: errno -- 来自C变量errno的数字错误代码。 winerror -- 在Windows下,这将为您提供本机Windows错误代码。在Windows下,如果winerror构造函数参数是整数,则根据Windows错误代码确定errno属性,并忽略errno参数。 strerror -- 操作系统提供的相应错误消息。 filename filename2 对于涉及文件系统路径的异常(例如open()或os.unlink()),filename是传递给函数的文件名。 对于涉及两个文件系统路径(例如os.rename())的函数,filename2对应于传递给函数的第二个文件名。 @Return: ''' # OSError([arg]) filename = 'nofile' try: f = open(filename) except OSError as e: print("exception OSError Test")# exception OSError Test print("e.errno = {}".format(e.errno))# e.errno = 2 # print("e.winerror = {}".format(e.winerror)) #报错 因为不在windows下 object has no attribute 'winerror' print("e.strerror = {}".format(e.strerror)) # e.strerror = No such file or directory print("e.filename = {}".format(e.filename)) # e.filename = nofile # OSError([arg]) End

exception OverflowError
''' @Description: 当算术运算的结果太大而无法表示时触发,整数不会发生这种情况(更倾向于触发 MemoryError ) 但是,由于历史原因,有时会在超出所需范围的整数时引发OverflowError。由于C中缺少浮点异常处理的标准化,因此不检查大多数浮点运算。 @Param: @Return: ''' # exception OverflowError try: def pi(): pi = 0 for k in range(350): pi += (4./(8.*k+1.) - 2./(8.*k+4.) - 1./(8.*k+5.) - 1./(8.*k+6.)) / 16.**k return pi print(pi()) except OverflowError: print("exception OverflowError Test")# exception OverflowError Test # 例子 来自 https://stackoverflow.com/questions/20201706/overflowerror-34-result-too-large # exception OverflowError End

exception RecursionError
''' @Description: 此异常派生自RuntimeError。当解释器检测到超出最大递归深度触发 @Param: @Return: ''' # exception RecursionError try: def recursion(n): if (n <= 1): return recursion(n - 1) recursion(998)# RecursionError: maximum recursion depth exceeded in comparison except RecursionError: # ?? 不知道为啥 捕获不到 print("exception RecursionError Test") # exception RecursionError End

exception ReferenceError
''' @Description: 当weakref.proxy()函数创建的弱引用代理用于在垃圾回收后访问引用的属性时触发@Param: @Return: ''' # exception ReferenceError import weakref class Foo(object): pass foo = Foo() proxy = weakref.proxy(foo) print(proxy)# <__main__.Foo object at 0x7f3d469af128> del foo try: print(proxy) except ReferenceError: print("exception ReferenceError Test")# exception ReferenceError Test # exception ReferenceError End

exception RuntimeError
''' @Description: 检测到的错误不属于任何其他类别触发。 @Param: @Return: ''' # exception RuntimeError def checkthenum(num): if num > 0: pass elif num < 0: pass else: raise RuntimeError try: checkthenum(0) except RuntimeError as e: print("exception RuntimeError Test")# exception RuntimeError Test # exception RuntimeError End

exception StopIteration
''' @Description: 由内置函数next()和迭代器的__next __()方法触发,表示迭代器没有其他项。 @Param: @Return: ''' # exception StopIteration def funcStopIteration(n): while n > 0: yield n n -= 1 list1 = funcStopIteration(2) # print(list1) try: next(list1) next(list1) next(list1) except StopIteration: print("exception StopIteration Test")# exception StopIteration Test # exception StopIteration End

exception StopAsyncIteration
''' @Description: 必须由异步迭代器对象的__anext __()方法引发以停止迭代。 @Param: @Return: ''' # exception StopAsyncIteration class TestImplementation: def __aiter__(self): return self async def __anext__(self): raise StopAsyncIterationasync def test_async_for(): async for _ in TestImplementation():# exception StopAsyncIteration Test pass# exception StopAsyncIteration End

exception SyntaxError
''' @Description: 解析器遇到语法错误触发 这可能发生在import语句中,调用内置函数exec()或eval(),或者在读取初始脚本或标准输入时触发。 @Param: @Return: ''' # exception SyntaxError strtmp = "for i in range(0,10) print(i)" try: exec(strtmp) except SyntaxError: print("exception SyntaxError Test") # exception SyntaxError Test # exception SyntaxError End

exception IndentationError
''' @Description: 与不正确的缩进相关的语法错误的基类。这是SyntaxError的子类。 @Param: @Return: ''' # exception IndentationError # exception IndentationError End

exception TabError
''' @Description: 缩进包含tabs和空格,Tab 和空格混用。这是IndentationError的子类。 @Param: @Return: ''' # exception TabError# exception TabError End

exception SystemError
''' @Description: 一般的解释器系统错误 @Param: @Return: ''' # exception SystemError# exception SystemError End

exception SystemExit
''' @Description: 解释器请求退出,sys.exit()函数引发此异常。 @Param: @Return: ''' # exception SystemExit import sys try: sys.exit() except SystemExit: print("exception SystemExit Test")# exception SystemExit Test # exception SystemExit End

exception TypeError
''' @Description: 将不适当类型的对象用于操作或函数时触发 关联值是一个字符串,提供有关类型不匹配的详细信息。 @Param: @Return: ''' # exception TypeErrortry: num = 1 next(num) except TypeError as e: print("exception TypeError Test")# exception TypeError Test # exception TypeError End

exception UnboundLocalError
''' @Description: 当引用函数或方法中的局部变量,但变量未初始化时触发。这是NameError的子类。 @Param: @Return: ''' # exception UnboundLocalError def funcUnboundLocalError(): test test += 1try: funcUnboundLocalError() except UnboundLocalError: print("exception UnboundLocalError Test")# exception UnboundLocalError Test # exception UnboundLocalError End

exception UnicodeError
''' @Description: 发生与Unicode相关的 编码或解码 错误时触发。它是ValueError的子类。 UnicodeError具有描述编码或解码错误的属性。例如,err.object [err.start:err.end]给出编解码器失败的特定无效输入。 @Param: encoding - 引发错误的编码的名称 reason- 描述特定编解码器错误的字符串 object - 编解码器试图编码或解码的对象。 start - 对象中无效数据的第一个索引。 end - 对象中最后一个无效数据后的索引。 @Return: ''' # exception UnicodeError ''' exception UnicodeEncodeError: 在编码期间发生与Unicode相关的错误时引发。它是UnicodeError的子类。 exception UnicodeDecodeError: 在解码期间发生与Unicode相关的错误时引发。它是UnicodeError的子类。 exception UnicodeTranslateError: 在翻译期间发生与Unicode相关的错误时引发。它是UnicodeError的子类。 ''' # exception UnicodeError End

exception ValueError
''' @Description: 当操作或函数接收到具有正确类型但值不合适的参数的情况时引发 @Param: @Return: ''' # exception ValueError try: int("hello world") except ValueError: print("exception ValueError Test")# exception ValueError Test # exception ValueError End

exception ZeroDivisionError
''' @Description: 当除法或模运算的第二个参数为零时触发 @Param: @Return: ''' # exception ZeroDivisionErrortry: 1/0 except ZeroDivisionError: print("exception ZeroDivisionError Test")# exception ZeroDivisionError Test # exception ZeroDivisionError End

''' @Description: 保留以下异常以与先前版本兼容; 从Python 3.3开始,它们是OSError的别名。 @Param: @Return: ''' # 保留以下异常以与先前版本兼容; 从Python 3.3开始,它们是OSError的别名。 ''' exception EnvironmentError exception IOError exception WindowsError ''' # 保留以下异常以与先前版本兼容; 从Python 3.3开始,它们是OSError的别名。 End

【Python3内置异常】具体异常 End
OS exceptions 以下异常是OSError的子类,它们会根据系统错误代码而产生。
exception BlockingIOError
''' @Description: 当一个操作阻塞一个设置为非阻塞操作的对象(例如套接字)时触发 @Param: @Return: ''' # exception BlockingIOError import socket TCP_IP = '192.168.1.10' TCP_PORT = 7 class TcpClient: def __init__(self): self.s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.s.settimeout(5)def connect(self): self.s.connect((TCP_IP,TCP_PORT))client = TcpClient() while True: try: client.connect() except socket.timeout: print("socket.timeout") # socket.timeout except BlockingIOError: print("exception BlockingIOError Test") # exception BlockingIOError Test break# exception BlockingIOError End

exception ChildProcessError
''' @Description: 在对子进程执行操作失败时触发。对应于errno ECHILD。 @Param: @Return: ''' # exception ChildProcessError # exception ChildProcessError End

exception ConnectionError
''' @Description: 与连接相关问题的基类 子类是BrokenPipeError,ConnectionAbortedError,ConnectionRefusedError和ConnectionResetError。 @Param: @Return: ''' # exception ConnectionError ''' exception BrokenPipeError: ConnectionError的子类,试图在管道另一端关闭的情况下进行写入,或者试图写一个已经关闭写入的套接字触发 ,对应于errno EPIPE和ESHUTDOWN。 exception ConnectionAbortedError: ConnectionError的子类,当连接尝试被同伴中止时触发,对应于errno ECONNABORTED。 exception ConnectionRefusedError: ConnectionError的子类,当连接尝试被同伴拒绝时触发,对应于errno ECONNREFUSED。 exception ConnectionResetError: ConnectionError的子类,当连接被同伴重置时触发,对应于errno ECONNRESET。 ''' # exception ConnectionError End

exception FileExistsError
''' @Description: 尝试创建已存在的文件或目录时触发。对应于errno EEXIST。 @Param: @Return: ''' # exception FileExistsError import os try: os.mknod("test.txt")# test.txt已存在 except FileExistsError: print("exception FileExistsError Test") # exception FileExistsError Test# exception FileExistsErrorEnd

exception FileNotFoundError
''' @Description: 在请求的文件或目录不存在时触发。对应于errno ENOENT。 @Param: @Return: ''' # exception FileNotFoundError import os print(os.stat("./test.txt")) # test.txt已存在 获取文件属性:os.stat(file) # os.stat_result(st_mode=33152, st_ino=131091, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=0, st_atime=1556116677, st_mtime=1556116677, st_ctime=1556116677) try: os.stat("nofile.txt") except FileNotFoundError: print("exception FileNotFoundError Test")# exception FileNotFoundError Test # exception FileNotFoundError End

exception InterruptedError
''' @Description: 当系统调用被传入信号中断时触发。对应于errno EINTR。 @Param: @Return: ''' # exception InterruptedError # exception InterruptedError End

exception IsADirectoryError
''' @Description: 在目录上请求文件操作(例如os.remove())时引发。对应于errno EISDIR。 @Param: @Return: ''' # exception IsADirectoryError import os try: os.remove("./test") # 函数用来删除一个文件:os.remove() # 如过"./test" 不存在时会抛异常FileNotFoundError: [Errno 2] No such file or directory: './test' except IsADirectoryError: print("exception IsADirectoryError Test")# exception IsADirectoryError Test # exception IsADirectoryError End

exception NotADirectoryError
''' @Description: 在对非目录的事物请求目录操作(例如os.listdir())时引发。对应于errno ENOTDIR。 @Param: @Return: ''' # exception NotADirectoryError import os try: os.listdir("./test.txt")# test.txt已存在 except NotADirectoryError: print("exception NotADirectoryError Test")# exception NotADirectoryError Test # exception NotADirectoryError End

exception PermissionError
''' @Description: 尝试在没有足够访问权限的情况下执行操作时触发 - 例如文件系统权限。对应于errno EACCES和EPERM。 @Param: @Return: ''' # exception PermissionError try: fp = open("./test.txt",mode='w')# 直接打开一个文件手动设置 test.txt 为 只读 fp.write("leacoder") fp.close() except PermissionError: print("exception PermissionError Test") # exception PermissionError Test# exception PermissionError End

exception ProcessLookupError
''' @Description: 当给定进程不存在时触发。对应于errno ESRCH。 @Param: @Return: ''' # exception ProcessLookupError import os import signal try: os.kill(123456,signal.SIGKILL) # 注意 123456 不是已存在的进程号 except ProcessLookupError: print("exception ProcessLookupError Test") # exception ProcessLookupError Test# exception ProcessLookupError End

exception TimeoutError
''' @Description: 当系统功能在系统级别超时时触发 @Param: @Return: ''' # exception TimeoutError # exception TimeoutError End

OS exceptions End
Warnings 以下异常用作警告类别; 有关详细信息 https://docs.python.org/3/library/warnings.html#warning-categories
exception Warning
''' @Description: Base class for warning categories. @Param: @Return: ''' # exception Warning ''' Base class for warning categories. ''' # exception Warning End

exception UserWarning
''' @Description: 用户代码生成警告的基类 @Param: @Return: ''' # exception UserWarning ''' 用户代码生成警告的基类 ''' # exception UserWarning End

exception DeprecationWarning
''' @Description: 弃用特性警告基类 @Param: @Return: ''' # exception DeprecationWarning ''' 弃用特性警告基类 ''' # exception DeprecationWarning End

exception PendingDeprecationWarning
''' @Description: 将来会被弃用特性的警告基类 @Param: @Return: ''' # exception PendingDeprecationWarning ''' 将来会被弃用特性的警告基类 ''' # exception PendingDeprecationWarning End

exception SyntaxWarning
''' @Description: 可疑句法警告基类 @Param: @Return: ''' # exception SyntaxWarning ''' 可疑句法警告基类 ''' # exception SyntaxWarning End

exception RuntimeWarning
''' @Description: 可疑 Runtime 行为警告基类 @Param: @Return: ''' # exception RuntimeWarning ''' 可疑 Runtime 行为警告基类 ''' # exception RuntimeWarning End

exception FutureWarning
''' @Description: 将来会改变语义结构的警告基类 @Param: @Return: ''' # exception FutureWarning ''' 将来会改变语义结构的警告基类 ''' # exception FutureWarning End

exception ImportWarning
''' @Description: 可能弄错模块导入警告基类 @Param: @Return: ''' # exception ImportWarning ''' 可能弄错模块导入警告基类 ''' # exception ImportWarning End

exception UnicodeWarning
''' @Description: Unicode 相关的警告基类 @Param: @Return: ''' # exception UnicodeWarning ''' Unicode 相关的警告基类 ''' # exception UnicodeWarning End

exception BytesWarning
''' @Description: 与bytes和bytearray相关的警告的基类 @Param: @Return: ''' # exception BytesWarning ''' 与bytes和bytearray相关的警告的基类 ''' # exception BytesWarning End

exception ResourceWarning
''' @Description: 与资源使用相关的警告的基类。被默认警告过滤器忽略。 @Param: @Return: ''' # exception ResourceWarning ''' 与资源使用相关的警告的基类。被默认警告过滤器忽略。 ''' # exception ResourceWarning End

Warnings End
GitHub链接:
https://github.com/lichangke/LeetCode
知乎个人首页:
https://www.zhihu.com/people/lichangke/
个人首页:
https://www.jianshu.com/u/3e95c7555dc7
个人Blog:
https://lichangke.github.io/
欢迎大家来一起交流学习

    推荐阅读