python 3.6.3 异常

在Python中,所有异常都必须是派生类的实例 BaseException。在try同一个声明中except 说提到一类特殊条款,该条款还处理来自类(从中但也不例外类派生的任何异常类派生)。通过子类化不相关的两个异常类永远不是等效的,即使它们具有相同的名称。

下面列出的内置异常可以由解释器或内置函数生成。除非提及,否则它们具有指示错误的详细原因的“关联值”。这可以是几个信息项的字符串或元组(例如,错误代码和解释代码的字符串)。关联值通常作为参数传递给异常类的构造函数。

用户代码可以引发内置异常。这可以用于测试异常处理程序或报告错误条件“​​就像”解释器引发相同异常的情况; 但请注意,没有任何可以防止用户代码提出不正确的错误。

内置的异常类可以被子类化以定义新的异常; 鼓励程序员从Exception 类或其子类之一导出新的异常,而不是从BaseException。有关定义异常的更多信息,请参见Python Tutorial中 用户定义的异常

当提高(或重新提高)exceptor finally子句中 的异常时,__context__会自动设置为捕获的最后一个异常; 如果未处理新的异常,则最终显示的追溯将包括始发异常和最终异常。

当提升一个新的异常(而不是使用裸raise重新提高目前正在处理的异常),隐含的例外情况下可以通过使用补充有明确的病因from有 raise

提高 new_exc  original_exc

以下表达式from必须是异常或None。它将被设置为__cause__例外。设置 __cause__也隐式设置__suppress_context__ 属性True,因此使用 有效地用于显示目的的新的(例如,将取代旧的例外来,同时保留现有的旧的例外内省调试时。raise new_exc from NoneKeyErrorAttributeError__context__

除了异常本身的追溯之外,缺省回溯显示代码还显示了这些链接异常。一个显式链接的异常在__cause__存在时总是显示。一个隐式链接的异常__context__只有在__cause__ is None__suppress_context__false时显示。

在任何一种情况下,异常本身总是在任何链接异常之后显示,以便traceback的最后一行始终显示最后一个引发的异常。

5.1。基类

以下异常主要用作其他异常的基类。

异常 BaseException

所有内置异常的基类。它不是直接由用户定义的类继承(为此使用Exception)。如果 str()在此类的实例上被调用,则返回实例的参数的表示形式,或者当没有参数时,返回空字符串。

args

给异常构造函数的参数元组。一些内置异常(如OSError)期望一定数量的参数,并为此元组的元素分配一个特殊的含义,而其他异常通常仅使用单个字符串给出错误消息。

with_traceback tb 

此方法将tb设置为异常的新追溯,并返回异常对象。它通常用于异常处理代码,如下所示:

try ... 
except  SomeException tb = sys exc_info ()[ 2 ] raise OtherException ... with_traceback tb 
异常 Exception

所有内置的非系统退出的异常都是从这个类派生出来的。所有用户定义的异常也应该从此类派生。

异常 ArithmeticError

对于那些内置异常的基类时引发的各种算术错误:OverflowErrorZeroDivisionError, FloatingPointError

异常 BufferError

当无法执行缓冲区相关操作时引发。

异常 LookupError

用于当一个键或索引上的映射或序列中使用所提出的异常的基类是无效的:IndexErrorKeyError。这可以直接提出来codecs.lookup()

5.2。具体例外

以下异常是通常引发的异常。

异常 AssertionError

assert声明失败时提起。

异常 AttributeError

属性引用(请参阅属性引用)或赋值失败时引发。(当一个对象根本不支持属性引用或属性赋值时,会TypeError被提出。)

异常 EOFError

input()函数达到文件结束条件(EOF)而不读取任何数据时引发。(注:在io.IOBase.read()和 io.IOBase.readline()方法时,他们打EOF返回一个空字符串。)

异常 FloatingPointError

浮点运算失败时触发。这个异常总是定义的,但是只有当Python配置了该--with-fpectl选项,或者WANT_SIGFPE_HANDLERpyconfig.h文件中定义了符号时,才能引发这种异常 。

异常 GeneratorExit

发电机协调组合关闭时提起; 看到generator.close()coroutine.close()。它直接继承BaseException而不是,Exception因为它在技术上不是错误。

异常 ImportError

import语句在尝试加载模块时出现问题。当“从列表”中 有一个名称不能找到时,也会引发。from ... import

namepath属性可以只使用关键字参数的构造函数中设置。当设置它们分别表示尝试导入的模块的名称和触发异常的任何文件的路径。

在版本3.3中更改:添加namepath属性。

异常 ModuleNotFoundError

当一个模块无法找到时,ImportError它的一个子类被引发importNone 发现时也被提出sys.modules

3.6版新功能

异常 IndexError

当序列下标超出范围时引发。(切片索引被静默地截断以落在允许范围内;如果索引不是整数,TypeError则会被提升。)

异常 KeyError

当在现有密钥集中找不到映射(字典)键时引发。

异常 KeyboardInterrupt

当用户点击中断键(正常Control-C或 Delete)时触发。在执行期间,定期检查中断。异常继承BaseException而不被意外地捕获Exception并因此阻止解释器退出的代码被捕获。

异常 MemoryError

当操作内存不足时提起,但情况可能仍然会被抢救(通过删除某些对象)。相关联的值是一个字符串,指示哪种(内部)操作在内存中运行。请注意,由于底层内存管理架构(C的malloc()功能),解释器可能并不总是能够从这种情况中完全恢复; 但是它引发了一个异常,以便可以打印堆栈追溯,以防万一出现程序的原因。

异常 NameError

当找不到本地或全球名称时引发。这仅适用于不合格的名称。关联值是包含无法找到的名称的错误消息。

异常 NotImplementedError

这个异常来源于RuntimeError。在用户定义的基类中,抽象方法应该引发此异常,当它们需要派生类来覆盖该方法时,或者正在开发类来指示实际实现仍需要添加。

注意

 

它不应该被用来表示一个操作符或者方法并不意味着被支持 - 在这种情况下,要么将操作符/方法定义为未定义,要么将子类设置为None

注意

 

NotImplementedErrorNotImplemented不能互换,即使他们有相似的名称和用途。查看 NotImplemented有关何时使用的详细信息。

异常 OSError arg  异常 OSError errnostrerror [,filename [,winerror [,filename2 

当系统函数返回与系统相关的错误(包括I / O失败,如“未找到文件”或“磁盘已满”)(不是非法参数类型或其他偶然错误)时,会引发异常。

构造函数的第二种形式设置相应的属性,如下所述。属性默认为None未指定。为了向后兼容,如果传递了三个参数,则该args属性仅包含前两个构造函数参数的2元组。

构造函数通常实际上返回一个子类OSError,如下面的操作系统异常所述。特定子类取决于最终errno值。此行为仅在OSError直接构建或通过别名构建时发生,并且在子类化时不会继承。

errno

来自C变量的数字错误代码errno

winerror

在Windows下,这将为您提供本机Windows错误代码。errno然后,该属性是POSIX术语中的本机错误代码的近似翻译。

在Windows下,如果winerror构造函数参数是整数,则该errno属性是从Windows错误代码中确定的,并且errno参数被忽略。在其他平台上, winerror参数被忽略,该winerror属性不存在。

strerror

相应的错误信息,由操作系统提供。它通过perror()POSIX FormatMessage() 下的C函数和Windows 下的格式化。

filename filename2

对于涉及文件系统路径(例如open()或 os.unlink())的异常,filename是传递给该函数的文件名。对于涉及两个文件系统路径(如 os.rename())的功能,filename2对应于传递给该函数的第二个文件名。

改变在3.3版:EnvironmentErrorIOErrorWindowsError, socket.errorselect.error和 mmap.error已合并到OSError,并构造可能会返回一个子类。

在版本3.4中更改:该filename属性现在是传递给函数的原始文件名,而不是编码为或从文件系统编码解码的名称。此外,添加了filename2构造函数参数和属性。

异常 OverflowError

当算术运算的结果太大而不能被表示时提升。整数不会发生(宁可 MemoryError放弃放弃)。但是,由于历史原因,有时会针对超出所需范围的整数引发OverflowError。由于C中浮点异常处理缺乏标准化,因此大多数浮点运算都不会被检查。

异常 RecursionError

这个异常来源于RuntimeError。当解释器检测到sys.getrecursionlimit()超出最大递归深度(见)时,它会被提升 。

3.5版中的新功能:以前,一个平原RuntimeError被提出来了。

异常 ReferenceError

当由weakref.proxy()函数创建的弱引用代理被用于在垃圾回收后访问引用对象的属性时引发此异常 。有关弱引用的更多信息,请参阅weakref模块。

异常 RuntimeError

当检测到不属于任何其他类别的错误时触发。相关联的值是一个字符串,表示正确的错误。

异常 StopIteration

通过内置函数next()迭代器的 __next__()方法来提示迭代器没有产生更多的项目。

异常对象具有单个属性value,在构造异常时作为参数给出,默认为None

当一个生成器协同函数返回时,StopIteration会引发一个新的实例,函数返回的值被用作value异常构造函数的 参数。

如果在一个指令存在的情况下定义了一个生成器函数,它将被转换为(保留 为新异常的原因)。from __future__ import generator_stopStopIterationRuntimeErrorStopIteration

在版本3.3中更改:添加value属性和生成器函数使用它返回值的能力。

在版本3.5中更改:引入了RuntimeError转换。

异常 StopAsyncIteration

必须通过异步迭代器对象的__anext__()方法 来引发,以停止迭代。

3.5版新功能。

异常 SyntaxError

当解析器遇到语法错误时引发。这可能发生在一个 import声明,调用内置的功能exec() 或eval()阅读初始脚本或标准输入(也交互)时,或。

这个类的实例有属性filenamelineno, offset并且text为的细节更容易获得。 str() 的异常实例仅返回消息。

异常 IndentationError

与错误缩进相关的语法错误的基类。这是一个子类SyntaxError

异常 TabError

缩进时引发的标签和空格不一致。这是一个子类IndentationError

异常 SystemError

当翻译发现内部错误时,提出了这种情况,但情况并不那么严重,导致它放弃了所有的希望。相关联的值是一个字符串,指示出现什么问题(低级别)。

您应该将其报告给Python解释器的作者或维护者。请确保报告Python解释器的版本(sys.version它也是在交互式Python会话开始时打印的),确切的错误消息(异常相关联的值)以及触发错误的程序源可能的可能。

异常 SystemExit

这个异常是由sys.exit()函数引起的。它继承 BaseException而不是Exception被偶然捕获的代码所捕获Exception。这允许异常正常传播并导致解释器退出。当它不被处理时,Python解释器退出; 不打印堆栈追溯。构造函数接受传递给的相同的可选参数sys.exit()。如果值为整数,则指定系统退出状态(传递给C的exit()函数); 如果是None,退出状态为零; 如果它有另一种类型(如字符串),则打印对象的值,退出状态为一。

调用sys.exit()被转换为异常,以便可以执行清理处理程序(finally语句的子句try),以便调试器可以执行脚本而不会失去控制的风险。os._exit()如果绝对有必要立即退出(例如,在调用后的子进程中os.fork()),则可以使用该功能。

code

传递给构造函数的退出状态或错误消息。(默认为None。)

异常 TypeError

当操作或功能应用于不适当类型的对象时提起。关联值是一个字符串,提供有关类型不匹配的详细信息。

用户代码可能引发此异常,以指示对对象的尝试操作不受支持,并不意味着。如果一个对象意在支持一个给定的操作,但还没有提供一个实现,NotImplementedError那么正确的例外就是加注。

错误类型的传递参数(例如传递list一个时 int,预计)应导致TypeError,但错误的值传递参数(例如一个号码外预期边界)应导致ValueError

异常 UnboundLocalError

当引用函数或方法中的局部变量引用时,但没有值绑定到该变量。这是一个子类 NameError

异常 UnicodeError

当与Unicode相关的编码或解码错误发生时引发。它是一个子类ValueError

UnicodeError具有描述编码或解码错误的属性。例如,err.object[err.start:err.end]给出编解码器失败的特定无效输入。

encoding

引起错误的编码的名称。

reason

描述特定编解码器错误的字符串。

object

编解码器试图进行编码或解码的对象。

start

第一个无效数据索引object

end

上次无效数据后的索引object

异常 UnicodeEncodeError

在编码时发生Unicode相关错误时引发。它是一个子类 UnicodeError

异常 UnicodeDecodeError

在解码过程中发生Unicode相关错误时引发。它是一个子类 UnicodeError

异常 UnicodeTranslateError

在翻译期间发生Unicode相关错误时引发。它是一个子类UnicodeError

异常 ValueError

当内置操作或函数接收到具有正确类型但不正确值的参数时引发,并且情况未被更精确的异常描述,例如IndexError

异常 ZeroDivisionError

当分割或模运算的第二个参数为零时提升。关联值是指示操作数类型和操作的字符串。

保留与以前版本兼容的以下例外:从Python 3.3开始,它们是别名OSError

异常 EnvironmentError
异常 IOError
异常 WindowsError

仅在Windows上可用。

5.2.1。操作系统异常

以下异常是子类OSError,它们会根据系统错误代码引发。

异常 BlockingIOError

当操作将阻止设置为非阻塞操作的对象(例如套接字)时触发。对应于errno EAGAINEALREADY, EWOULDBLOCKEINPROGRESS

除了那些OSErrorBlockingIOError可以有一个属性:

characters_written

一个整数,包含在阻塞之前写入流的字符数。使用io模块中缓冲的I / O类时,此属性可用。

异常 ChildProcessError

当对子进程的操作失败时引发。对应errno ECHILD

异常 ConnectionError

连接相关问题的基础类。

子类是BrokenPipeErrorConnectionAbortedError, ConnectionRefusedErrorConnectionResetError

异常 BrokenPipeError

的一个子类ConnectionError尝试,而另一端已经关闭管道上写的时候,或者尝试这已经写入关闭套接字上写,提高。对应于errno EPIPEESHUTDOWN

异常 ConnectionAbortedError

ConnectionError当对等体中止连接尝试时,引发的一个子类。对应errno ECONNABORTED

异常 ConnectionRefusedError

ConnectionError连接尝试被对等体拒绝时引发的一个子类。对应errno ECONNREFUSED

异常 ConnectionResetError

ConnectionError当对等体重置连接时,引发的子类。对应errno ECONNRESET

异常 FileExistsError

在尝试创建已存在的文件或目录时引发。对应errno EEXIST

异常 FileNotFoundError

当请求文件或目录但不存在时引发。对应errno ENOENT

异常 InterruptedError

当系统呼叫被输入信号中断时触发。对应errno EINTR

在版本3.5中更改:当系统调用信号中断时,Python会重试系统调用,除非信号处理程序引发异常(请参阅PEP 475 为理由),而不是提高InterruptedError

异常 IsADirectoryError

os.remove()在目录上请求文件操作(如)时引发。对应errno EISDIR

异常 NotADirectoryError

os.listdir()对不是目录的东西请求目录操作(如)时引发。对应errno ENOTDIR

异常 PermissionError

当尝试运行没有足够访问权限的操作(例如文件系统权限)时引发。对应于errno EACCESEPERM

异常 ProcessLookupError

当给定的进程不存在时提起。对应errno ESRCH

异常 TimeoutError

当系统功能在系统级别超时时引发。对应errno ETIMEDOUT

3.3版本中的新功能:OSError添加了上述所有子类。

也可以看看

 

PEP 3151 - 重新编写OS和IO异常层次结构

5.3。警告

以下例外被用作警告类别; warnings 有关详细信息,请参阅该模块。

异常 Warning

警告类别的基类。

异常 UserWarning

用户代码生成的警告的基类。

异常 DeprecationWarning

关于已弃用功能的警告的基类。

异常 PendingDeprecationWarning

关于将来不推荐使用的功能的警告的基类。

异常 SyntaxWarning

关于可疑语法的警告的基类。

异常 RuntimeWarning

关于可疑运行时行为的警告的基类。

异常 FutureWarning

关于将来会在语义上改变的构造的警告的基类。

异常 ImportWarning

关于模块进口中可能出现的错误的警告的基础类。

异常 UnicodeWarning

与Unicode相关的警告的基类。

异常 BytesWarning

基础类相关的警告bytesbytearray

异常 ResourceWarning

与资源使用相关的警告的基类。

版本3.2中的新功能。

5.4。异常层次

内置异常的类层次结构是:

BaseException 
 +  -  SystemExit 
 +  -  KeyboardInterrupt 
 + - GeneratorExit + - 异常 + - StopIteration + - StopAsyncIteration + - ArithmeticError | + - FloatingPointError | + - OverflowError | + - ZeroDivisionError + - AssertionError + - AttributeError + - BufferError + - EOFError + - ImportError + - ModuleNotFoundError + - LookupError | + - IndexError | + - KeyError + - MemoryError + - NameError | + - UnboundLocalError + - OSError | + - BlockingIOError | + - ChildProcessError | + - ConnectionError | | + - BrokenPipeError | | + - ConnectionAbortedError | | + - ConnectionRefusedError | | + - ConnectionResetError | + - FileExistsError | + - FileNotFoundError | + - InterruptedError | + - IsADirectoryError | + - NotADirectoryError | + - PermissionError | + - ProcessLookupError | + - TimeoutError + - ReferenceError + - RuntimeError | + - NotImplementedError | + - RecursionError + - SyntaxError | + - IndentationError | + - TabError + - SystemError + - TypeError + - ValueError | + - UnicodeError | + - UnicodeDecodeError | + - UnicodeEncodeError | + - UnicodeTranslateError + - Warning + - DeprecationWarning + - PendingDeprecationWarning + - RuntimeWarning + - SyntaxWarning + - UserWarning + - FutureWarning + - ImportWarning + - UnicodeWarning + - BytesWarning + - ResourceWarning

转载于:https://www.cnblogs.com/zsczsc/p/7592478.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值