zoukankan      html  css  js  c++  java
  • python 3.6.3 异常

    在Python中,所有异常都必须是派生类的实例 BaseExceptiontry同一个声明中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_tracebacktb 

    此方法将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有关何时使用的详细信息。

    异常OSErrorarg 
    异常OSErrorerrnostrerror [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
  • 相关阅读:
    PHP7 网络编程(六)Socket和IO多路复用【待】
    PHP7 网络编程(五)进程间通信【待】
    PHP7 网络编程(四)signal信号【待】
    PHP7 网络编程(三)孤儿进程与僵尸进程
    PHP7 网络编程(二)daemon守护进程
    PHP7 网络编程(一)多进程初探
    为什么要用Rust取代C/C ++重写Python底层?
    Modern Self-Service Data Platforms
    一文读懂量化系统接入及相关平台
    rust asynchronous io:从 mio 到 coroutine
  • 原文地址:https://www.cnblogs.com/zsczsc/p/7592478.html
Copyright © 2011-2022 走看看