首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Exceptions

异常应该是类对象。异常在模块中定义exceptions。这个模块永远不需要显式导入:在内置的命名空间和exceptions模块中都提供了异常。

对于类异常,在try带有except提及特定类的子句的语句中,该子句还处理从该类派生的任何异常类(但不包括派生它的异常类)。两个不通过子类关联的异常类永远不会相同,即使它们具有相同的名称。

下面列出的内置例外可以由解释器或内置函数生成。除了提到的地方,它们有一个“关联值”,表示错误的详细原因。这可能是一个包含多项信息的字符串或元组(例如,错误代码和解释代码的字符串)。关联的值是raise语句的第二个参数。如果异常类是从标准根类派生的BaseException,则关联值将作为异常实例的args属性出现。

用户代码可以引发内置的异常。这可用于测试异常处理程序或报告错误情况,“就像”解释程序引发相同异常的情况一样; 但要注意,没有什么可以防止用户代码引发不适当的错误。

内置的异常类可以被分类以定义新的异常; 鼓励程序员从Exception类或它的一个子类派生新的异常,而不是从中派生BaseException。有关定义异常的更多信息,请参见Python教程中用户定义的例外

以下例外仅用作其他例外的基类。

exception BaseException

所有内置异常的基类。它并不意味着被用户定义的类直接继承(为此,使用Exception)。如果对此类的实例调用str()or unicode(),则返回实例参数的表示形式,如果没有参数,则返回空字符串。

2.5版本中的新功能。

args

赋给异常构造函数的参数元组。一些内置的异常(例如IOError)会期望一定数量的参数并为这个元组赋予特殊的含义,而另一些内置异常通常只用一个字符串来调用,从而给出错误消息。

exception Exception

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

在版本2.5中更改:更改为从中继承BaseException

exception StandardError

该基类除了所有内置例外StopIterationGeneratorExitKeyboardInterruptSystemExitStandardError本身来源于Exception

exception ArithmeticError

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

exception BufferError

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

exception LookupError

在映射或序列上使用的键或索引无效时引发异常的基类:IndexErrorKeyError。这可以直接通过codecs.lookup()

exception EnvironmentError

可以在Python系统之外发生的异常的基类:IOErrorOSError。当使用2元组创建此类型的异常时,第一个项目可用于实例的errno属性(假定为错误号),第二个项目在strerror属性上可用(通常是关联的错误消息)。该元组本身也可用于该args属性。

1.5.2版本的新功能。

EnvironmentError用三元组实例化一个异常时,前两个项目如上所述可用,而第三个项目可用于该filename属性。但是,为了向后兼容,该args属性只包含前两个构造函数参数的2元组。

这个filename属性是None当这个异常是用3个以外的参数创建的。的errnostrerror属性也None当实例与其他大于2个或3个参数创建。在这最后一种情况下,args将逐字构造函数参数作为元组包含在内。

以下例外是实际引发的例外情况。

exception AssertionError

当一个assert陈述失败时引发。

exception AttributeError

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

exception EOFError

当其中一个内置函数(input()raw_input())在没有读取任何数据的情况下碰到文件结束条件(EOF)时引发。(注意:当方法碰到EOF时file.read()file.readline()方法会返回一个空字符串。)

exception FloatingPointError

当浮点操作失败时引发。这个异常总是被定义的,但是只能在Python配置了--with-fpectl选项或者文件中WANT_SIGFPE_HANDLER定义了符号时才会引发pyconfig.h

exception GeneratorExit

当调用生成器close()方法时引发。它直接继承BaseException而不是StandardError因为它在技术上不是一个错误。

2.5版本中的新功能。

版本2.6中更改:更改为继承BaseException

exception IOError

当I / O操作(例如print语句,内置open()函数或文件对象的方法)因I / O相关原因(例如,“找不到文件”或“磁盘已满”)而失败时引发。

这个类来源于EnvironmentError。有关异常实例属性的更多信息,请参阅上面的讨论。

在版本2.6中更改:更改socket.error为将其用作基类。

exception ImportError

import语句未能找到模块定义或from ... import未能找到要导入的名称时引发。

exception IndexError

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

exception KeyError

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

exception KeyboardInterrupt

当用户点击中断键时(通常Control-CDelete),引发。在执行期间,会定期检查中断。当内置函数input()raw_input()等待输入时键入中断也会引发此异常。该异常继承,以防BaseException意外捕获代码,Exception从而阻止解释器退出。

在版本2.5中更改:更改为从中继承BaseException

exception MemoryError

当一个操作用完内存时引发,但情况仍然可能被救出(通过删除一些对象)。关联的值是一个字符串,指示什么样的(内部)操作耗尽内存。请注意,由于底层内存管理架构(C的malloc()功能),解释器可能无法总是从这种情况中恢复; 它仍然会引发一个异常,以便可以打印堆栈回溯,以防止失控程序的发生。

exception NameError

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

exception NotImplementedError

这个异常来源于RuntimeError。在用户定义的基类中,抽象方法在它们需要派生类重写方法时应引发此异常。

1.5.2版本的新功能。

exception OSError

这个异常来源于EnvironmentError。当一个函数返回一个与系统相关的错误(不适用于非法参数类型或其他偶然错误)时会引发它。该errno属性是from的数字错误代码errnostrerror属性是相应的字符串,将由C函数打印perror()。请参阅模块errno,其中包含由基础操作系统定义的错误代码的名称。

对于涉及文件系统路径(例如chdir()unlink())的异常,异常实例将包含第三个属性filename,它是传递给函数的文件名。

1.5.2版本的新功能。

exception OverflowError

当算术运算的结果太大而无法表示时引发。对于长整数(这会发生而MemoryError不是放弃)和大多数使用纯整数的操作(这会返回一个长整数)不会发生。由于C中缺少浮点异常处理的标准化,大多数浮点操作也不会被检查。

exception ReferenceError

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

版本2.2中的新功能:以前称为weakref.ReferenceError例外。

exception RuntimeError

当检测到不属于任何其他类别的错误时引发。关联的值是一个字符串,指示出错的地方。

exception StopIteration

通过迭代器next()方法来提示没有其他值。这是源自Exception而不是StandardError,因为这不被认为是在正常的应用程序中的错误。

2.2版本中的新功能。

exception SyntaxError

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

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

exception IndentationError

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

exception TabError

当缩进含有不一致的制表符和空格时引发。这是一个子类IndentationError

exception SystemError

当翻译发现内部错误时引发,但情况看起来并不严重,导致它放弃所有希望。关联的值是一个字符串,表示出现了什么问题(以低级方式)。

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

exception SystemExit

这个例外是由sys.exit()函数引发的。当它不被处理时,Python解释器退出; 没有堆栈回溯被打印。如果关联值是一个纯整数,则它指定系统退出状态(传递给C的exit()函数); 如果是None,退出状态为零; 如果它有其他类型(如字符串),则打印该对象的值并且退出状态为一。

实例具有code设置为建议的退出状态或错误消息的属性(默认为None)。此外,此异常直接来自BaseException而不是StandardError,因为它在技术上不是一个错误。

调用将sys.exit()被转换为异常,以便可以执行清理处理程序(finally语句子句try),以便调试程序可以执行脚本而不会失去控制权。os._exit()如果确实需要立即退出(例如,在调用后的子进程中os.fork()),则可以使用该函数。

唯一的例外来自继承BaseException,而不是StandardErrorException使得它不会意外地被映入代码捕获Exception。这允许异常正确传播并导致解释器退出。

在版本2.5中更改:更改为从中继承BaseException

exception TypeError

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

exception UnboundLocalError

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

2.0版本中的新功能。

exception UnicodeError

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

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

encoding

引发错误的编码的名称。

reason

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

object

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

start

中的无效数据的第一个索引object

end

最后一个无效数据之后的索引object

2.0版本中的新功能。

exception UnicodeEncodeError

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

2.3版本的新功能。

exception UnicodeDecodeError

在解码期间发生与Unicode相关的错误时引发。它是一个子类UnicodeError

2.3版本的新功能。

exception UnicodeTranslateError

在翻译过程中发生与Unicode相关的错误时引发。它是一个子类UnicodeError

2.3版本的新功能。

exception ValueError

当内建的操作或函数接收到具有正确类型但值不恰当的参数时引发,并且这种情况不会被更精确的异常(例如,)所描述IndexError

exception VMSError

只在VMS上可用。当发生VMS特定错误时引发。

exception WindowsError

当发生特定于Windows的错误或错误编号与errno值不对应时引发。该winerrorstrerror值是从的返回值创建GetLastError()FormatMessage()从Windows平台的API函数。该errno值将该值映射winerror到相应的errno.h值。这是一个子类OSError

2.0版本中的新功能。

在版本2.5中更改:以前的版本将GetLastError()代码放入errno

exception ZeroDivisionError

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

以下例外用作警告类别; 请参阅warnings模块了解更多信息。

exception Warning

警告类别的基类。

exception UserWarning

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

exception DeprecationWarning

有关不推荐使用的功能的警告的基类。

exception PendingDeprecationWarning

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

exception SyntaxWarning

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

exception RuntimeWarning

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

exception FutureWarning

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

exception ImportWarning

基类,用于警告模块导入中可能出现的错误。

2.5版本中的新功能。

exception UnicodeWarning

与Unicode相关的警告的基类。

New in version 2.5.

1.异常层次结构

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

代码语言:javascript
复制
BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StandardError
      |    +-- BufferError
      |    +-- ArithmeticError
      |    |    +-- FloatingPointError
      |    |    +-- OverflowError
      |    |    +-- ZeroDivisionError
      |    +-- AssertionError
      |    +-- AttributeError
      |    +-- EnvironmentError
      |    |    +-- IOError
      |    |    +-- OSError
      |    |         +-- WindowsError (Windows)
      |    |         +-- VMSError (VMS)
      |    +-- EOFError
      |    +-- ImportError
      |    +-- LookupError
      |    |    +-- IndexError
      |    |    +-- KeyError
      |    +-- MemoryError
      |    +-- NameError
      |    |    +-- UnboundLocalError
      |    +-- ReferenceError
      |    +-- RuntimeError
      |    |    +-- NotImplementedError
      |    +-- SyntaxError
      |    |    +-- IndentationError
      |    |         +-- TabError
      |    +-- SystemError
      |    +-- TypeError
      |    +-- ValueError
      |         +-- UnicodeError
      |              +-- UnicodeDecodeError
      |              +-- UnicodeEncodeError
      |              +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
	   +-- ImportWarning
	   +-- UnicodeWarning
	   +-- BytesWarning

扫码关注腾讯云开发者

领取腾讯云代金券