Exceptions
Built-in 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
该基类除了所有内置例外StopIteration
,GeneratorExit
,KeyboardInterrupt
和SystemExit
。StandardError
本身来源于Exception
。
exception ArithmeticError
对于那些内置异常的基类时引发的各种算术错误:OverflowError
,ZeroDivisionError
,FloatingPointError
。
exception BufferError
当无法执行缓冲区相关操作时引发。
exception LookupError
在映射或序列上使用的键或索引无效时引发异常的基类:IndexError
,KeyError
。这可以直接通过codecs.lookup()
。
exception EnvironmentError
可以在Python系统之外发生的异常的基类:IOError
,OSError
。当使用2元组创建此类型的异常时,第一个项目可用于实例的errno
属性(假定为错误号),第二个项目在strerror
属性上可用(通常是关联的错误消息)。该元组本身也可用于该args
属性。
1.5.2版本的新功能。
当EnvironmentError
用三元组实例化一个异常时,前两个项目如上所述可用,而第三个项目可用于该filename
属性。但是,为了向后兼容,该args
属性只包含前两个构造函数参数的2元组。
这个filename
属性是None
当这个异常是用3个以外的参数创建的。的errno
和strerror
属性也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-C
或Delete
),引发。在执行期间,会定期检查中断。当内置函数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的数字错误代码errno
,strerror
属性是相应的字符串,将由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()
读取初始脚本或标准输入(也交互),或当。
这个类的实例有属性filename
,lineno
,offset
并且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
,而不是StandardError
或Exception
使得它不会意外地被映入代码捕获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
值不对应时引发。该winerror
和strerror
值是从的返回值创建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.异常层次结构
内置异常的类层次结构是:
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