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
异常层次结构
异常层次结构.pngException 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 Test
try:
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 Test
try:
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 NotImplementedError
class ClassDemo(object):
def func(self):
raise NotImplementedError
class 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) # <generator object funcStopIteration at 0x7fcc5e1d7c78>
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 StopAsyncIteration
async 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 TypeError
try:
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 += 1
try:
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 ZeroDivisionError
try:
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
具体异常 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 FileExistsError End
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/
欢迎大家来一起交流学习
网友评论