uTools-Manuals/docs/python/exceptions.html
2019-04-21 11:50:48 +08:00

70 lines
72 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="body" role="main"><div class="section" id="built-in-exceptions"><h1><span class="yiyi-st" id="yiyi-9">5。</span><span class="yiyi-st" id="yiyi-10">内建异常</span></h1><p id="index-0"><span class="yiyi-st" id="yiyi-11">在 Python 中,所有的异常必须是从 <a class="reference internal" href="#BaseException" title="BaseException"><code class="xref py py-class docutils literal"><span class="pre">BaseException</span></code></a>中派生的类的实例.</span><span class="yiyi-st" id="yiyi-12">在带有提及特定类的<a class="reference internal" href="../reference/compound_stmts.html#except"><code class="xref std std-keyword docutils literal"><span class="pre">except</span></code></a>子句的<a class="reference internal" href="../reference/compound_stmts.html#try"><code class="xref std std-keyword docutils literal"><span class="pre">try</span></code></a>语句中,该子句还处理从该类派生的任何异常类(但不包括<em></em>)。</span><span class="yiyi-st" id="yiyi-13">通过子类化得到的两个不相关的异常类永远不会相等,即便它们具有相同的名称。</span></p><p id="index-1"><span class="yiyi-st" id="yiyi-14">下列内建异常可以通过解释器或者内建函数来生成。</span><span class="yiyi-st" id="yiyi-15">除了提到的那些地方,它们还有“关联值 (associated value)”指示错误的详细的原因。</span><span class="yiyi-st" id="yiyi-16">这可以是字符串或包含几个信息项(例如,错误码和解释错误码的字符串)的元组。</span><span class="yiyi-st" id="yiyi-17">这些关联值通常会作为参数,传递给异常类的构造函数。</span></p><p><span class="yiyi-st" id="yiyi-18">用户代码可产生内建异常。</span><span class="yiyi-st" id="yiyi-19">这样可以用于测试异常处理程序或报告错误条件,模拟解析器发生了相同的异常情况;但请注意,没有任何手段可以防止用户代码引起不适当的异常。</span></p><p><span class="yiyi-st" id="yiyi-20">内建异常类可以被子类化以定义新异常;建议程序员从<a class="reference internal" href="#Exception" title="Exception"><code class="xref py py-exc docutils literal"><span class="pre">Exception</span></code></a>类或其子类中的一个派生新异常,而不是从<a class="reference internal" href="#BaseException" title="BaseException"><code class="xref py py-exc docutils literal"><span class="pre">BaseException</span></code></a>派生新异常。</span><span class="yiyi-st" id="yiyi-21">有关定义异常的详细信息可以查阅《Python 教程》中的 <a class="reference internal" href="../tutorial/errors.html#tut-userexceptions"><span>User-defined Exceptions</span></a> 一节。</span></p><p><span class="yiyi-st" id="yiyi-22"><a class="reference internal" href="../reference/compound_stmts.html#except"><code class="xref std std-keyword docutils literal"><span class="pre">except</span></code></a><a class="reference internal" href="../reference/compound_stmts.html#finally"><code class="xref std std-keyword docutils literal"><span class="pre">finally</span></code></a>子句<code class="xref py py-attr docutils literal"><span class="pre">__context__</span></code>中提升(或重新提高)异常时会自动设置为捕获的最后一个异常;如果未处理新的异常,则最终显示的追踪将包括原始异常和最终异常。</span></p><p><span class="yiyi-st" id="yiyi-23">When raising a new exception (rather than using a bare <code class="docutils literal"><span class="pre">raise</span></code> to re-raise the exception currently being handled), the implicit exception context can be supplemented with an explicit cause by using <a class="reference internal" href="../reference/simple_stmts.html#from"><code class="xref std std-keyword docutils literal"><span class="pre">from</span></code></a> with <a class="reference internal" href="../reference/simple_stmts.html#raise"><code class="xref std std-keyword docutils literal"><span class="pre">raise</span></code></a>:</span></p><pre><code class="language-python"><span></span><span class="k">raise</span> <span class="n">new_exc</span> <span class="kn">from</span> <span class="nn">original_exc</span>
</code></pre><p><span class="yiyi-st" id="yiyi-24">The expression following <a class="reference internal" href="../reference/simple_stmts.html#from"><code class="xref std std-keyword docutils literal"><span class="pre">from</span></code></a> must be an exception or <code class="docutils literal"><span class="pre">None</span></code>. </span><span class="yiyi-st" id="yiyi-25">它将在引发异常上设置为<code class="xref py py-attr docutils literal"><span class="pre">__cause__</span></code></span><span class="yiyi-st" id="yiyi-26">设置<code class="xref py py-attr docutils literal"><span class="pre">__ cause __</span></code>还会将<code class="xref py py-attr docutils literal"><span class="pre">__ suppress_context __</span></code>属性隐式设置为<code class="docutils literal"><span class="pre">True</span></code>,以便使用<code class="docutils literal"><span class="pre">raise</span> <span class="pre">new_exc </span> <span class="pre">from</span> <span class="pre">None</span></code>有效地替换旧的异常用于显示目的。</span><span class="yiyi-st" id="yiyi-27"><a class="reference internal" href="#KeyError" title="KeyError"><code class="xref py py-exc docutils literal"><span class="pre">KeyError</span></code></a>转换为<a class="reference internal" href="#AttributeError" title="AttributeError"><code class="xref py py-exc docutils literal"><span class="pre">AttributeError</span></code></a>,同时在调试时保留<code class="xref py py-attr docutils literal"><span class="pre">__context__</span></code>中的旧异常可用于内省。</span></p><p><span class="yiyi-st" id="yiyi-28">默认回溯显示代码显示这些链接异常以及异常本身的追溯。</span><span class="yiyi-st" id="yiyi-29"><code class="xref py py-attr docutils literal"><span class="pre">__cause__</span></code>中的显式链接异常在出现时始终显示。</span><span class="yiyi-st" id="yiyi-30">仅当<code class="xref py py-attr docutils literal"><span class="pre">__cause__</span></code><a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal"><span class="pre">None</span></code></a><code class="xref py py-attr docutils literal"><span class="pre">__suppress_context__</span></code>为假时,才会显示<code class="xref py py-attr docutils literal"><span class="pre">__context__</span></code>中的隐式链接异常。</span></p><p><span class="yiyi-st" id="yiyi-31">在任何情况下,异常本身始终显示在任何链接异常之后,以便追溯的最后一行总是显示最后引发的异常。</span></p><div class="section" id="base-classes"><h2><span class="yiyi-st" id="yiyi-32">5.1.</span><span class="yiyi-st" id="yiyi-33">基类</span></h2><p><span class="yiyi-st" id="yiyi-34">The following exceptions are used mostly as base classes for other exceptions.</span></p><dl class="exception"><dt id="BaseException"><span class="yiyi-st" id="yiyi-35"><em class="property">exception </em><code class="descname">BaseException</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-36">所有内建的异常的基类。</span><span class="yiyi-st" id="yiyi-37">它并不意味用户定义的类应该直接继承它(因此,请使用 <a class="reference internal" href="#Exception" title="Exception"><code class="xref py py-exc docutils literal"><span class="pre">Exception</span></code></a>)。</span><span class="yiyi-st" id="yiyi-38">如果对这个类的实例调用<a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-func docutils literal"><span class="pre">str()</span></code></a>则返回实例的参数s的表示或者当没有参数时返回空字符串。</span></p><dl class="attribute"><dt id="BaseException.args"><span class="yiyi-st" id="yiyi-39"><code class="descname">args</code> </span></dt><dd><p><span class="yiyi-st" id="yiyi-40">异常构造函数的参数元组。</span><span class="yiyi-st" id="yiyi-41">一些内建异常(如<a class="reference internal" href="#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>)需要一定数量的参数,并为该元组的元素分配特殊含义,而其他异常通常仅使用单个字符串给出错误消息。</span></p></dd></dl><dl class="method"><dt id="BaseException.with_traceback"><span class="yiyi-st" id="yiyi-42"><code class="descname">with_traceback</code><span class="sig-paren">(</span><em>tb</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-43">此方法将<em>tb</em>设置为异常的新跟踪,并返回异常对象。</span><span class="yiyi-st" id="yiyi-44">它通常用于异常处理代码,如下所示:</span></p><pre><code class="language-python"><span></span><span class="k">try</span><span class="p">:</span>
<span class="o">...</span>
<span class="k">except</span> <span class="n">SomeException</span><span class="p">:</span>
<span class="n">tb</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()[</span><span class="mi">2</span><span class="p">]</span>
<span class="k">raise</span> <span class="n">OtherException</span><span class="p">(</span><span class="o">...</span><span class="p">)</span><span class="o">.</span><span class="n">with_traceback</span><span class="p">(</span><span class="n">tb</span><span class="p">)</span>
</code></pre></dd></dl></dd></dl><dl class="exception"><dt id="Exception"><span class="yiyi-st" id="yiyi-45"><em class="property">exception </em><code class="descname">Exception</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-46">所有内建的、非系统退出的异常,都是从该类派生的。</span><span class="yiyi-st" id="yiyi-47">此外,应该从该类派生所有用户定义的异常。</span></p></dd></dl><dl class="exception"><dt id="ArithmeticError"><span class="yiyi-st" id="yiyi-48"><em class="property">exception </em><code class="descname">ArithmeticError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-49">各种算术错误引发的内建异常的基类:<a class="reference internal" href="#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a>, <a class="reference internal" href="#ZeroDivisionError" title="ZeroDivisionError"><code class="xref py py-exc docutils literal"><span class="pre">ZeroDivisionError</span></code></a>, <a class="reference internal" href="#FloatingPointError" title="FloatingPointError"><code class="xref py py-exc docutils literal"><span class="pre">FloatingPointError</span></code></a></span></p></dd></dl><dl class="exception"><dt id="BufferError"><span class="yiyi-st" id="yiyi-50"><em class="property">exception </em><code class="descname">BufferError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-51"><a class="reference internal" href="../c-api/buffer.html#bufferobjects"><span>buffer</span></a> 相关的操作无法执行时引发。</span></p></dd></dl><dl class="exception"><dt id="LookupError"><span class="yiyi-st" id="yiyi-52"><em class="property">exception </em><code class="descname">LookupError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-53">当用于映射或序列的键或索引无效时引发的异常的基类:<a class="reference internal" href="#IndexError" title="IndexError"><code class="xref py py-exc docutils literal"><span class="pre">IndexError</span></code></a>, <a class="reference internal" href="#KeyError" title="KeyError"><code class="xref py py-exc docutils literal"><span class="pre">KeyError</span></code></a></span><span class="yiyi-st" id="yiyi-54">可以直接通过 <a class="reference internal" href="codecs.html#codecs.lookup" title="codecs.lookup"><code class="xref py py-func docutils literal"><span class="pre">codecs.lookup()</span></code></a> 引发。</span></p></dd></dl></div><div class="section" id="concrete-exceptions"><h2><span class="yiyi-st" id="yiyi-55">5.2.</span><span class="yiyi-st" id="yiyi-56">具体的异常</span></h2><p><span class="yiyi-st" id="yiyi-57">以下异常是通常引发的异常。</span></p><dl class="exception"><dt id="AssertionError"><span class="yiyi-st" id="yiyi-58"><em class="property">exception </em><code class="descname">AssertionError</code></span></dt><dd><p id="index-2"><span class="yiyi-st" id="yiyi-59"><a class="reference internal" href="../reference/simple_stmts.html#assert"><code class="xref std std-keyword docutils literal"><span class="pre">assert</span></code></a> 语句失败时引发。</span></p></dd></dl><dl class="exception"><dt id="AttributeError"><span class="yiyi-st" id="yiyi-60"><em class="property">exception </em><code class="descname">AttributeError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-61">当属性引用(参见 <a class="reference internal" href="../reference/expressions.html#attribute-references"><span>Attribute references</span></a>)或赋值失败时引发。</span><span class="yiyi-st" id="yiyi-62">(当对象根本不支持属性引用或属性赋值时,将引发 <a class="reference internal" href="#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a>。)</span></p></dd></dl><dl class="exception"><dt id="EOFError"><span class="yiyi-st" id="yiyi-63"><em class="property">exception </em><code class="descname">EOFError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-64"><a class="reference internal" href="functions.html#input" title="input"><code class="xref py py-func docutils literal"><span class="pre">input()</span></code></a>函数未读取任何数据时遇到文件结束条件EOF时触发。</span><span class="yiyi-st" id="yiyi-65">N.B.</span><span class="yiyi-st" id="yiyi-66"><code class="xref py py-meth docutils literal"><span class="pre">io.IOBase.read()</span></code><a class="reference internal" href="io.html#io.IOBase.readline" title="io.IOBase.readline"><code class="xref py py-meth docutils literal"><span class="pre">io.IOBase.readline()</span></code></a>方法在命中EOF时会返回一个空字符串。</span></p></dd></dl><dl class="exception"><dt id="FloatingPointError"><span class="yiyi-st" id="yiyi-67"><em class="property">exception </em><code class="descname">FloatingPointError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-68">当浮点数操作失败时引发。</span><span class="yiyi-st" id="yiyi-69">该异常总是被定义的,但仅能当 Python 用 <code class="docutils literal"><span class="pre">--with-fpectl</span></code> 选项配置时,或当 <code class="file docutils literal"><span class="pre">pyconfig.h</span></code> 文件中定义了 <code class="xref py py-const docutils literal"><span class="pre">WANT_SIGFPE_HANDLER</span></code> 符号时引发。</span></p></dd></dl><dl class="exception"><dt id="GeneratorExit"><span class="yiyi-st" id="yiyi-70"><em class="property">exception </em><code class="descname">GeneratorExit</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-71"><a class="reference internal" href="../glossary.html#term-generator"><span class="xref std std-term">generator</span></a><a class="reference internal" href="../glossary.html#term-coroutine"><span class="xref std std-term">coroutine</span></a>关闭时触发;参见<a class="reference internal" href="../reference/expressions.html#generator.close" title="generator.close"><code class="xref py py-meth docutils literal"><span class="pre">generator.close()</span></code></a><a class="reference internal" href="../reference/datamodel.html#coroutine.close" title="coroutine.close"><code class="xref py py-meth docutils literal"><span class="pre">coroutine.close()</span></code></a></span><span class="yiyi-st" id="yiyi-72">它直接继承自<a class="reference internal" href="#BaseException" title="BaseException"><code class="xref py py-exc docutils literal"><span class="pre">BaseException</span></code></a>而不是<a class="reference internal" href="#Exception" title="Exception"><code class="xref py py-exc docutils literal"><span class="pre">Exception</span></code></a>,因为它在技术上不是错误。</span></p></dd></dl><dl class="exception"><dt id="ImportError"><span class="yiyi-st" id="yiyi-73"><em class="property">exception </em><code class="descname">ImportError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-74"><a class="reference internal" href="../reference/simple_stmts.html#import"><code class="xref std std-keyword docutils literal"><span class="pre">import</span></code></a>语句未能找到模块定义或<code class="docutils literal"><span class="pre"></span> <span class="pre">...</span> <span class="pre">import</span> </code>无法找到要导入的名称。</span></p><p><span class="yiyi-st" id="yiyi-75">可以使用构造函数的仅关键字参数来设置<code class="xref py py-attr docutils literal"><span class="pre">name</span></code><code class="xref py py-attr docutils literal"><span class="pre">path</span></code>属性。</span><span class="yiyi-st" id="yiyi-76">设置时,它们分别表示尝试导入的模块的名称和触发异常的任何文件的路径。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-77"><span class="versionmodified">在版本3.3中已更改:</span>添加了<code class="xref py py-attr docutils literal"><span class="pre">name</span></code><code class="xref py py-attr docutils literal"><span class="pre">path</span></code>属性。</span></p></div></dd></dl><dl class="exception"><dt id="IndexError"><span class="yiyi-st" id="yiyi-78"><em class="property">exception </em><code class="descname">IndexError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-79">当序列下标超出取值范围时引发。</span><span class="yiyi-st" id="yiyi-80">(片索引被静默截断到允许的范围内;如果索引不是整数,则会引发<a class="reference internal" href="#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a>。)</span></p></dd></dl><dl class="exception"><dt id="KeyError"><span class="yiyi-st" id="yiyi-81"><em class="property">exception </em><code class="descname">KeyError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-82">当在现有键的集合中找不到映射的(字典)键时引发。</span></p></dd></dl><dl class="exception"><dt id="KeyboardInterrupt"><span class="yiyi-st" id="yiyi-83"><em class="property">exception </em><code class="descname">KeyboardInterrupt</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-84">当用户按下中断键(通常是 <code class="kbd docutils literal"><span class="pre">Delete</span></code><code class="kbd docutils literal"><span class="pre">Control-C</span></code>)时引发。</span><span class="yiyi-st" id="yiyi-85">执行期间,会定期检查中断。</span><span class="yiyi-st" id="yiyi-86">该异常继承自 <a class="reference internal" href="#BaseException" title="BaseException"><code class="xref py py-exc docutils literal"><span class="pre">BaseException</span></code></a> ,因此不会被 <a class="reference internal" href="#Exception" title="Exception"><code class="xref py py-exc docutils literal"><span class="pre">Exception</span></code></a> 的捕获代码意外捕获,以防止解释器退出。</span></p></dd></dl><dl class="exception"><dt id="MemoryError"><span class="yiyi-st" id="yiyi-87"><em class="property">exception </em><code class="descname">MemoryError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-88">当一个操作将内存耗尽,但情况仍可挽救时(通过删除某些对象)时引发。</span><span class="yiyi-st" id="yiyi-89">关联值是一个字符串,它指示哪种(内部)操作耗尽了内存。</span><span class="yiyi-st" id="yiyi-90">注意由于底层内存管理架构C的<code class="xref c c-func docutils literal"><span class="pre">malloc()</span></code>函数),解释器可能不总是能够从这种情况完全恢复;它仍然引入了一个异常,以便可以打印堆栈跟踪,以防万一程序失败的原因。</span></p></dd></dl><dl class="exception"><dt id="NameError"><span class="yiyi-st" id="yiyi-91"><em class="property">exception </em><code class="descname">NameError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-92">当找不到本地或全局名称时引发。</span><span class="yiyi-st" id="yiyi-93">这仅适用于不合格的名称。</span><span class="yiyi-st" id="yiyi-94">关联值是一条错误消息,其中包括找不到的名称。</span></p></dd></dl><dl class="exception"><dt id="NotImplementedError"><span class="yiyi-st" id="yiyi-95"><em class="property">exception </em><code class="descname">NotImplementedError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-96">此异常是从 <a class="reference internal" href="#RuntimeError" title="RuntimeError"><code class="xref py py-exc docutils literal"><span class="pre">RuntimeError</span></code></a> 派生的。</span><span class="yiyi-st" id="yiyi-97">当用户定义基类需要派生类重写方法时,抽象方法会引发该异常。</span></p></dd></dl><dl class="exception"><dt id="OSError"><span class="yiyi-st" id="yiyi-98"><em class="property">exception </em><code class="descname">OSError</code><span class="sig-paren">(</span><span class="optional">[</span><em>arg</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dt><span class="yiyi-st" id="yiyi-99"><em class="property">exception </em><code class="descname">OSError</code><span class="sig-paren">(</span><em>errno</em>, <em>strerror</em><span class="optional">[</span>, <em>filename</em><span class="optional">[</span>, <em>winerror</em><span class="optional">[</span>, <em>filename2</em><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p id="index-3"><span class="yiyi-st" id="yiyi-100">This exception is raised when a system function returns a system-related error, including I/O failures such as “file not found” or “disk full” (not for illegal argument types or other incidental errors). </span></p><p><span class="yiyi-st" id="yiyi-101">第二种形式的构造函数设置相应的属性,如下所述。</span><span class="yiyi-st" id="yiyi-102">如果未指定,属性默认为<a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal"><span class="pre">None</span></code></a></span><span class="yiyi-st" id="yiyi-103">为了向后兼容,如果传递了三个参数,则<a class="reference internal" href="#BaseException.args" title="BaseException.args"><code class="xref py py-attr docutils literal"><span class="pre">args</span></code></a>属性只包含前两个构造函数参数的2元组。</span></p><p><span class="yiyi-st" id="yiyi-104">构造函数通常实际返回<a class="reference internal" href="#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>的子类,如下面的<a class="reference internal" href="#os-exceptions">OS异常</a>中所述。</span><span class="yiyi-st" id="yiyi-105">特定的子类取决于最终的<a class="reference internal" href="#OSError.errno" title="OSError.errno"><code class="xref py py-attr docutils literal"><span class="pre">errno</span></code></a>值。</span><span class="yiyi-st" id="yiyi-106">此行为仅在直接构造<a class="reference internal" href="#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>或通过别名时发生,并且在子类化时不会继承。</span></p><dl class="attribute"><dt id="OSError.errno"><span class="yiyi-st" id="yiyi-107"><code class="descname">errno</code> </span></dt><dd><p><span class="yiyi-st" id="yiyi-108">来自C变量<code class="xref c c-data docutils literal"><span class="pre">errno</span></code>的数字错误代码。</span></p></dd></dl><dl class="attribute"><dt id="OSError.winerror"><span class="yiyi-st" id="yiyi-109"><code class="descname">winerror</code> </span></dt><dd><p><span class="yiyi-st" id="yiyi-110">在Windows下这将提供本机Windows错误代码。</span><span class="yiyi-st" id="yiyi-111">因此,<a class="reference internal" href="#OSError.errno" title="OSError.errno"><code class="xref py py-attr docutils literal"><span class="pre">errno</span></code></a>属性是POSIX术语中的本机错误代码的近似翻译。</span></p><p><span class="yiyi-st" id="yiyi-112">在Windows下如果<em>winerror</em>构造函数参数是整数,则<a class="reference internal" href="#OSError.errno" title="OSError.errno"><code class="xref py py-attr docutils literal"><span class="pre">errno</span></code></a>属性从Windows错误代码确定并且忽略<em>errno</em></span><span class="yiyi-st" id="yiyi-113">在其他平台上,<em>winerror</em>参数被忽略,并且<a class="reference internal" href="#OSError.winerror" title="OSError.winerror"><code class="xref py py-attr docutils literal"><span class="pre">winerror</span></code></a>属性不存在。</span></p></dd></dl><dl class="attribute"><dt id="OSError.strerror"><span class="yiyi-st" id="yiyi-114"><code class="descname">strerror</code> </span></dt><dd><p><span class="yiyi-st" id="yiyi-115">相应的错误消息,由操作系统提供。</span><span class="yiyi-st" id="yiyi-116">它由POSIX下的C函数<code class="xref c c-func docutils literal"><span class="pre">perror()</span></code>和Windows下的<code class="xref c c-func docutils literal"><span class="pre">FormatMessage()</span></code>格式化。</span></p></dd></dl><dl class="attribute"><dt id="OSError.filename"><span class="yiyi-st" id="yiyi-117"><code class="descname">filename</code> </span></dt><dt id="OSError.filename2"><span class="yiyi-st" id="yiyi-118"><code class="descname">filename2</code> </span></dt><dd><p><span class="yiyi-st" id="yiyi-119">对于涉及文件系统路径(例如<a class="reference internal" href="functions.html#open" title="open"><code class="xref py py-func docutils literal"><span class="pre">open()</span></code></a><a class="reference internal" href="os.html#os.unlink" title="os.unlink"><code class="xref py py-func docutils literal"><span class="pre">os.unlink()</span></code></a>)的异常,<a class="reference internal" href="#OSError.filename" title="OSError.filename"><code class="xref py py-attr docutils literal"><span class="pre">filename</span></code></a>是传递给功能。</span><span class="yiyi-st" id="yiyi-120">对于涉及两个文件系统路径(例如<a class="reference internal" href="os.html#os.rename" title="os.rename"><code class="xref py py-func docutils literal"><span class="pre">os.rename()</span></code></a>)的函数,<a class="reference internal" href="#OSError.filename2" title="OSError.filename2"><code class="xref py py-attr docutils literal"><span class="pre">filename2</span></code></a>对应于传递给函数的第二个文件名。</span></p></dd></dl><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-121"><span class="versionmodified">在版本3.3中已更改:</span> <a class="reference internal" href="#EnvironmentError" title="EnvironmentError"><code class="xref py py-exc docutils literal"><span class="pre">EnvironmentError</span></code></a><a class="reference internal" href="#IOError" title="IOError"><code class="xref py py-exc docutils literal"><span class="pre">IOError</span></code></a><a class="reference internal" href="#WindowsError" title="WindowsError"><code class="xref py py-exc docutils literal"><span class="pre">WindowsError</span></code></a><a class="reference internal" href="socket.html#socket.error" title="socket.error"><code class="xref py py-exc docutils literal"><span class="pre">socket.error</span></code></a> <a class="reference internal" href="select.html#select.error" title="select.error"><code class="xref py py-exc docutils literal"><span class="pre">select.error</span></code></a><code class="xref py py-exc docutils literal"><span class="pre">mmap.error</span></code>已合并到<a class="reference internal" href="#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>中,构造函数可能会返回一个子类。</span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-122"><span class="versionmodified">在版本3.4中更改:</span> <a class="reference internal" href="#OSError.filename" title="OSError.filename"><code class="xref py py-attr docutils literal"><span class="pre">filename</span></code></a>属性现在是传递给函数的原始文件名,而不是编码到文件系统编码或从文件系统编码解码的名称。</span><span class="yiyi-st" id="yiyi-123">此外,还添加了<em>filename2</em>构造函数参数和属性。</span></p></div></dd></dl><dl class="exception"><dt id="OverflowError"><span class="yiyi-st" id="yiyi-124"><em class="property">exception </em><code class="descname">OverflowError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-125">当要表示算术运算的结果太大时引发。</span><span class="yiyi-st" id="yiyi-126">这不能发生在整数(它宁愿引发<a class="reference internal" href="#MemoryError" title="MemoryError"><code class="xref py py-exc docutils literal"><span class="pre">MemoryError</span></code></a>比放弃)。</span><span class="yiyi-st" id="yiyi-127">但是由于历史原因OverflowError有时会对超出必需范围的整数产生。</span><span class="yiyi-st" id="yiyi-128">由于C中浮点异常处理缺乏标准化大多数浮点运算都不会被检查。</span></p></dd></dl><dl class="exception"><dt id="RecursionError"><span class="yiyi-st" id="yiyi-129"><em class="property">exception </em><code class="descname">RecursionError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-130">此异常是从 <a class="reference internal" href="#RuntimeError" title="RuntimeError"><code class="xref py py-exc docutils literal"><span class="pre">RuntimeError</span></code></a> 派生的。</span><span class="yiyi-st" id="yiyi-131">当解释器检测到超出最大递归深度(参见<a class="reference internal" href="sys.html#sys.getrecursionlimit" title="sys.getrecursionlimit"><code class="xref py py-func docutils literal"><span class="pre">sys.getrecursionlimit()</span></code></a>)时,它被引发。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-132"><span class="versionmodified">版本3.5中的新功能:</span>以前,引发了一个平常的<a class="reference internal" href="#RuntimeError" title="RuntimeError"><code class="xref py py-exc docutils literal"><span class="pre">RuntimeError</span></code></a></span></p></div></dd></dl><dl class="exception"><dt id="ReferenceError"><span class="yiyi-st" id="yiyi-133"><em class="property">exception </em><code class="descname">ReferenceError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-134">当用一个由 <a class="reference internal" href="weakref.html#weakref.proxy" title="weakref.proxy"><code class="xref py py-func docutils literal"><span class="pre">weakref.proxy()</span></code></a> 函数创建的弱引用代理,去访问引用者的属性,而该引用者已经被垃圾回收时,会引发此异常。</span><span class="yiyi-st" id="yiyi-135">更多有关弱引用的信息,请参阅 <a class="reference internal" href="weakref.html#module-weakref" title="weakref: Support for weak references and weak dictionaries."><code class="xref py py-mod docutils literal"><span class="pre">weakref</span></code></a> 模块。</span></p></dd></dl><dl class="exception"><dt id="RuntimeError"><span class="yiyi-st" id="yiyi-136"><em class="property">exception </em><code class="descname">RuntimeError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-137">当检出错误不属于任何其它类别时引发。</span><span class="yiyi-st" id="yiyi-138">关联值是一个字符串,它指示到底什么地方出错了。</span></p></dd></dl><dl class="exception"><dt id="StopIteration"><span class="yiyi-st" id="yiyi-139"><em class="property">exception </em><code class="descname">StopIteration</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-140">由内建函数<a class="reference internal" href="functions.html#next" title="next"><code class="xref py py-func docutils literal"><span class="pre">next()</span></code></a><a class="reference internal" href="../glossary.html#term-iterator"><span class="xref std std-term">iterator</span></a><a class="reference internal" href="stdtypes.html#iterator.__next__" title="iterator.__next__"><code class="xref py py-meth docutils literal"><span class="pre">__next__()</span></code></a>方法引发, 。</span></p><p><span class="yiyi-st" id="yiyi-141">异常对象具有单个属性<code class="xref py py-attr docutils literal"><span class="pre">value</span></code>,作为构造异常时的参数,默认为<a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal"><span class="pre">None</span></code></a></span></p><p><span class="yiyi-st" id="yiyi-142"><a class="reference internal" href="../glossary.html#term-generator"><span class="xref std std-term">generator</span></a><a class="reference internal" href="../glossary.html#term-coroutine"><span class="xref std std-term">coroutine</span></a>函数返回时,将引发一个新的<a class="reference internal" href="#StopIteration" title="StopIteration"><code class="xref py py-exc docutils literal"><span class="pre">StopIteration</span></code></a>实例,并将该函数返回的值用作<code class="xref py py-attr docutils literal"><span class="pre">value</span></code>参数指向异常的构造函数。</span></p><p><span class="yiyi-st" id="yiyi-143">如果存在<code class="docutils literal"><span class="pre"></span> <span class="pre">__未来__</span> <span class="pre">导入</span> <span class="pre">generator_stop</span></code>指令引发<a class="reference internal" href="#StopIteration" title="StopIteration"><code class="xref py py-exc docutils literal"><span class="pre">StopIteration</span></code></a>,它将被转换为<a class="reference internal" href="#RuntimeError" title="RuntimeError"><code class="xref py py-exc docutils literal"><span class="pre">RuntimeError</span></code></a>(保留<a class="reference internal" href="#StopIteration" title="StopIteration"><code class="xref py py-exc docutils literal"><span class="pre">StopIteration</span></code></a>作为新异常的原因)。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-144"><span class="versionmodified">在版本3.3中已更改:</span>添加了<code class="docutils literal"><span class="pre">value</span></code>属性和生成器函数用于返回值的能力。</span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-145"><span class="versionmodified">在版本3.5中已更改:</span>引入了RuntimeError变换。</span></p></div></dd></dl><dl class="exception"><dt id="StopAsyncIteration"><span class="yiyi-st" id="yiyi-146"><em class="property">exception </em><code class="descname">StopAsyncIteration</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-147">必须通过<a class="reference internal" href="../glossary.html#term-asynchronous-iterator"><span class="xref std std-term">asynchronous iterator</span></a>对象的<a class="reference internal" href="../reference/datamodel.html#object.__anext__" title="object.__anext__"><code class="xref py py-meth docutils literal"><span class="pre">__anext__()</span></code></a>方法提高以停止迭代。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-148"><span class="versionmodified">版本3.5中的新功能。</span></span></p></div></dd></dl><dl class="exception"><dt id="SyntaxError"><span class="yiyi-st" id="yiyi-149"><em class="property">exception </em><code class="descname">SyntaxError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-150">当解析器遇到语法错误时引发。</span><span class="yiyi-st" id="yiyi-151">这可能发生在<a class="reference internal" href="../reference/simple_stmts.html#import"><code class="xref std std-keyword docutils literal"><span class="pre">import</span></code></a>语句中,在调用内建函数<a class="reference internal" href="functions.html#exec" title="exec"><code class="xref py py-func docutils literal"><span class="pre">exec()</span></code></a><a class="reference internal" href="functions.html#eval" title="eval"><code class="xref py py-func docutils literal"><span class="pre">eval()</span></code></a>脚本或标准输入(也是交互式)。</span></p><p><span class="yiyi-st" id="yiyi-152">该类的实例具有更容易访问相关细节的 <code class="xref py py-attr docutils literal"><span class="pre">filename</span></code><code class="xref py py-attr docutils literal"><span class="pre">text</span></code><code class="xref py py-attr docutils literal"><span class="pre">lineno</span></code><code class="xref py py-attr docutils literal"><span class="pre">offset</span></code> 属性。</span><span class="yiyi-st" id="yiyi-153">向内建函数 <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-func docutils literal"><span class="pre">str()</span></code></a> 传入异常实例,仅会返回错误消息。</span></p></dd></dl><dl class="exception"><dt id="IndentationError"><span class="yiyi-st" id="yiyi-154"><em class="property">exception </em><code class="descname">IndentationError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-155">与不正确的缩进相关的语法错误的基类。</span><span class="yiyi-st" id="yiyi-156">这是 <a class="reference internal" href="#SyntaxError" title="SyntaxError"><code class="xref py py-exc docutils literal"><span class="pre">SyntaxError</span></code></a> 的一个子类。</span></p></dd></dl><dl class="exception"><dt id="TabError"><span class="yiyi-st" id="yiyi-157"><em class="property">exception </em><code class="descname">TabError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-158">当缩进中包含对制表符和空格的混用时引发。</span><span class="yiyi-st" id="yiyi-159">这是 <a class="reference internal" href="#IndentationError" title="IndentationError"><code class="xref py py-exc docutils literal"><span class="pre">IndentationError</span></code></a> 的一个子类。</span></p></dd></dl><dl class="exception"><dt id="SystemError"><span class="yiyi-st" id="yiyi-160"><em class="property">exception </em><code class="descname">SystemError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-161">当解释器发现内部错误,但情况并没有看起来那么严重,不至于到要放弃所有希望的地步,此时会引发本异常。</span><span class="yiyi-st" id="yiyi-162">关联值是一个字符串,它(用底层术语)指示什么出错了。</span></p><p><span class="yiyi-st" id="yiyi-163">您应把这个异常报告给您的 Python 解释器的作者或维护者。</span><span class="yiyi-st" id="yiyi-164">请务必报告您使用的 Python 解释器版本(<code class="docutils literal"><span class="pre">sys.version</span></code>;版本号在 Python 交互会话开始时也会被打印出来),确切的错误消息(异常的关联值),以及错误出发的程序源码(如果您方便提供的话)。</span></p></dd></dl><dl class="exception"><dt id="SystemExit"><span class="yiyi-st" id="yiyi-165"><em class="property">exception </em><code class="descname">SystemExit</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-166"><a class="reference internal" href="sys.html#sys.exit" title="sys.exit"><code class="xref py py-func docutils literal"><span class="pre">sys.exit()</span></code></a> 函数引发此异常。</span><span class="yiyi-st" id="yiyi-167">它继承自<a class="reference internal" href="#BaseException" title="BaseException"><code class="xref py py-exc docutils literal"><span class="pre">BaseException</span></code></a>而不是<a class="reference internal" href="#Exception" title="Exception"><code class="xref py py-exc docutils literal"><span class="pre">Exception</span></code></a>,因此它不会被捕获到<a class="reference internal" href="#Exception" title="Exception"><code class="xref py py-exc docutils literal"><span class="pre">Exception</span></code></a>的代码意外捕获。</span><span class="yiyi-st" id="yiyi-168">这允许异常正确地向上传播并导致解释器退出。</span><span class="yiyi-st" id="yiyi-169">当它不被处理时Python解释器退出不会打印堆栈跟踪。</span><span class="yiyi-st" id="yiyi-170">构造函数接受传递给<a class="reference internal" href="sys.html#sys.exit" title="sys.exit"><code class="xref py py-func docutils literal"><span class="pre">sys.exit()</span></code></a>的相同可选参数。</span><span class="yiyi-st" id="yiyi-171">如果值为整数则指定系统退出状态传递给C的<code class="xref c c-func docutils literal"><span class="pre">exit()</span></code>函数);如果<code class="docutils literal"><span class="pre">None</span></code>退出状态为零如果它有另一个类型例如字符串则打印对象的值退出状态为1。</span></p><p><span class="yiyi-st" id="yiyi-172"><a class="reference internal" href="sys.html#sys.exit" title="sys.exit"><code class="xref py py-func docutils literal"><span class="pre">sys.exit()</span></code></a> 的调用会被转译成异常,以便执行清理处理程序(<a class="reference internal" href="../reference/compound_stmts.html#try"><code class="xref std std-keyword docutils literal"><span class="pre">try</span></code></a> 语句的 <a class="reference internal" href="../reference/compound_stmts.html#finally"><code class="xref std std-keyword docutils literal"><span class="pre">finally</span></code></a> 从句),因此,调试器会执行脚本,不必冒失去控制的风险。</span><span class="yiyi-st" id="yiyi-173">如果绝对需要程序立即退出(例如,在调用 <a class="reference internal" href="os.html#os.fork" title="os.fork"><code class="xref py py-func docutils literal"><span class="pre">os.fork()</span></code></a> 后的子进程中),可以使用 <a class="reference internal" href="os.html#os._exit" title="os._exit"><code class="xref py py-func docutils literal"><span class="pre">os._exit()</span></code></a> 函数。</span></p><dl class="attribute"><dt id="SystemExit.code"><span class="yiyi-st" id="yiyi-174"><code class="descname">code</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-175">传递给构造函数的退出状态或错误消息。</span><span class="yiyi-st" id="yiyi-176">(默认为<code class="docutils literal"><span class="pre">None</span></code>。)</span></p></dd></dl></dd></dl><dl class="exception"><dt id="TypeError"><span class="yiyi-st" id="yiyi-177"><em class="property">exception </em><code class="descname">TypeError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-178">当操作或函数应用于不合适类型的对象时引发。</span><span class="yiyi-st" id="yiyi-179">关联值是字符串,它提供有关类型不匹配的详细信息。</span></p></dd></dl><dl class="exception"><dt id="UnboundLocalError"><span class="yiyi-st" id="yiyi-180"><em class="property">exception </em><code class="descname">UnboundLocalError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-181">当引用函数或方法局部变量,但变量没有绑定值时引发。</span><span class="yiyi-st" id="yiyi-182">这是 <a class="reference internal" href="#NameError" title="NameError"><code class="xref py py-exc docutils literal"><span class="pre">NameError</span></code></a> 的一个子类。</span></p></dd></dl><dl class="exception"><dt id="UnicodeError"><span class="yiyi-st" id="yiyi-183"><em class="property">exception </em><code class="descname">UnicodeError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-184">当有关 Unicode 编码或解码错误出现时引发。</span><span class="yiyi-st" id="yiyi-185">它是 <a class="reference internal" href="#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a> 的一个子类。</span></p><p><span class="yiyi-st" id="yiyi-186"><a class="reference internal" href="#UnicodeError" title="UnicodeError"><code class="xref py py-exc docutils literal"><span class="pre">UnicodeError</span></code></a> 具有描述编码或解码错误的属性。</span><span class="yiyi-st" id="yiyi-187">例如,<code class="docutils literal"><span class="pre">err.object[err.start:err.end]</span></code> 给出了导致解码器失败的特定的无效输入。</span></p><dl class="attribute"><dt id="UnicodeError.encoding"><span class="yiyi-st" id="yiyi-188"><code class="descname">encoding</code> </span></dt><dd><p><span class="yiyi-st" id="yiyi-189">引发错误的编码名称。</span></p></dd></dl><dl class="attribute"><dt id="UnicodeError.reason"><span class="yiyi-st" id="yiyi-190"><code class="descname">reason</code> </span></dt><dd><p><span class="yiyi-st" id="yiyi-191">一个字符串,它描述特定的解码器错误。</span></p></dd></dl><dl class="attribute"><dt id="UnicodeError.object"><span class="yiyi-st" id="yiyi-192"><code class="descname">object</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-193">解码器试图进行编码或解码的对象。</span></p></dd></dl><dl class="attribute"><dt id="UnicodeError.start"><span class="yiyi-st" id="yiyi-194"><code class="descname">start</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-195"><a class="reference internal" href="functions.html#object" title="object"><code class="xref py py-attr docutils literal"><span class="pre">object</span></code></a> 的第一个索引中数据无效。</span></p></dd></dl><dl class="attribute"><dt id="UnicodeError.end"><span class="yiyi-st" id="yiyi-196"><code class="descname">end</code> </span></dt><dd><p><span class="yiyi-st" id="yiyi-197"><a class="reference internal" href="functions.html#object" title="object"><code class="xref py py-attr docutils literal"><span class="pre">object</span></code></a> 的最后一个索引中数据无效。</span></p></dd></dl></dd></dl><dl class="exception"><dt id="UnicodeEncodeError"><span class="yiyi-st" id="yiyi-198"><em class="property">exception </em><code class="descname">UnicodeEncodeError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-199">当编码过程中出现的一个 Unicode 相关的错误时引发。</span><span class="yiyi-st" id="yiyi-200">它是 <a class="reference internal" href="#UnicodeError" title="UnicodeError"><code class="xref py py-exc docutils literal"><span class="pre">UnicodeError</span></code></a> 的一个子类。</span></p></dd></dl><dl class="exception"><dt id="UnicodeDecodeError"><span class="yiyi-st" id="yiyi-201"><em class="property">exception </em><code class="descname">UnicodeDecodeError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-202">当解码过程中出现的一个 Unicode 相关的错误时引发。</span><span class="yiyi-st" id="yiyi-203">它是 <a class="reference internal" href="#UnicodeError" title="UnicodeError"><code class="xref py py-exc docutils literal"><span class="pre">UnicodeError</span></code></a> 的一个子类。</span></p></dd></dl><dl class="exception"><dt id="UnicodeTranslateError"><span class="yiyi-st" id="yiyi-204"><em class="property">exception </em><code class="descname">UnicodeTranslateError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-205">当翻译过程中出现的一个 Unicode 相关的错误时引发。</span><span class="yiyi-st" id="yiyi-206">它是 <a class="reference internal" href="#UnicodeError" title="UnicodeError"><code class="xref py py-exc docutils literal"><span class="pre">UnicodeError</span></code></a> 的一个子类。</span></p></dd></dl><dl class="exception"><dt id="ValueError"><span class="yiyi-st" id="yiyi-207"><em class="property">exception </em><code class="descname">ValueError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-208">当内建操作或函数,接收到类型正确,但值不正确的参数,而且这种情况不能用诸如 <a class="reference internal" href="#IndexError" title="IndexError"><code class="xref py py-exc docutils literal"><span class="pre">IndexError</span></code></a> 这样的更精确的异常进行描述时引发。</span></p></dd></dl><dl class="exception"><dt id="ZeroDivisionError"><span class="yiyi-st" id="yiyi-209"><em class="property">exception </em><code class="descname">ZeroDivisionError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-210">当除法或取模运算的第 2 个参数为 0 时引发。</span><span class="yiyi-st" id="yiyi-211">关联值是一个字符串,它指出操作数的类型和运算符。</span></p></dd></dl><p><span class="yiyi-st" id="yiyi-212">保留以下例外以与先前版本兼容从Python 3.3开始,它们是<a class="reference internal" href="#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>的别名。</span></p><dl class="exception"><dt id="EnvironmentError"><span class="yiyi-st" id="yiyi-213"><em class="property">exception </em><code class="descname">EnvironmentError</code></span></dt><dd></dd></dl><dl class="exception"><dt id="IOError"><span class="yiyi-st" id="yiyi-214"><em class="property">exception </em><code class="descname">IOError</code></span></dt><dd></dd></dl><dl class="exception"><dt id="WindowsError"><span class="yiyi-st" id="yiyi-215"><em class="property">exception </em><code class="descname">WindowsError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-216">仅在Windows上可用。</span></p></dd></dl><div class="section" id="os-exceptions"><h3><span class="yiyi-st" id="yiyi-217">5.2.1.</span><span class="yiyi-st" id="yiyi-218">操作系统异常</span></h3><p><span class="yiyi-st" id="yiyi-219">以下异常是<a class="reference internal" href="#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>的子类,它们根据系统错误代码而产生。</span></p><dl class="exception"><dt id="BlockingIOError"><span class="yiyi-st" id="yiyi-220"><em class="property">exception </em><code class="descname">BlockingIOError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-221">在操作会阻止对象(例如对象)时触发。</span><span class="yiyi-st" id="yiyi-222">套接字)设置为非阻塞操作。</span><span class="yiyi-st" id="yiyi-223">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">EAGAIN</span></code><code class="docutils literal"><span class="pre">EALREADY</span></code><code class="docutils literal"><span class="pre">EWOULDBLOCK</span></code><code class="docutils literal"><span class="pre">EINPROGRESS</span></code></span></p><p><span class="yiyi-st" id="yiyi-224">除了<a class="reference internal" href="#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>之外,<a class="reference internal" href="#BlockingIOError" title="BlockingIOError"><code class="xref py py-exc docutils literal"><span class="pre">BlockingIOError</span></code></a>还可以有一个属性:</span></p><dl class="attribute"><dt id="BlockingIOError.characters_written"><span class="yiyi-st" id="yiyi-225"><code class="descname">characters_written</code> </span></dt><dd><p><span class="yiyi-st" id="yiyi-226">包含在阻止之前写入流中的字符数的整数。</span><span class="yiyi-st" id="yiyi-227">当使用来自<a class="reference internal" href="io.html#module-io" title="io: Core tools for working with streams."><code class="xref py py-mod docutils literal"><span class="pre">io</span></code></a>模块的缓冲I / O类时此属性可用。</span></p></dd></dl></dd></dl><dl class="exception"><dt id="ChildProcessError"><span class="yiyi-st" id="yiyi-228"><em class="property">exception </em><code class="descname">ChildProcessError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-229">在子进程上的操作失败时引发。</span><span class="yiyi-st" id="yiyi-230">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">ECHILD</span></code></span></p></dd></dl><dl class="exception"><dt id="ConnectionError"><span class="yiyi-st" id="yiyi-231"><em class="property">exception </em><code class="descname">ConnectionError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-232">连接相关问题的基类。</span></p><p><span class="yiyi-st" id="yiyi-233">子类别为<a class="reference internal" href="#BrokenPipeError" title="BrokenPipeError"><code class="xref py py-exc docutils literal"><span class="pre">BrokenPipeError</span></code></a><a class="reference internal" href="#ConnectionAbortedError" title="ConnectionAbortedError"><code class="xref py py-exc docutils literal"><span class="pre">ConnectionAbortedError</span></code></a><a class="reference internal" href="#ConnectionRefusedError" title="ConnectionRefusedError"><code class="xref py py-exc docutils literal"><span class="pre">ConnectionRefusedError</span></code></a><a class="reference internal" href="#ConnectionResetError" title="ConnectionResetError"><code class="xref py py-exc docutils literal"><span class="pre">ConnectionResetError</span></code></a></span></p></dd></dl><dl class="exception"><dt id="BrokenPipeError"><span class="yiyi-st" id="yiyi-234"><em class="property">exception </em><code class="descname">BrokenPipeError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-235"><a class="reference internal" href="#ConnectionError" title="ConnectionError"><code class="xref py py-exc docutils literal"><span class="pre">ConnectionError</span></code></a>的子类,在尝试在管道上写入时引发,而另一端已关闭,或试图在已关闭写入的套接字上写入。</span><span class="yiyi-st" id="yiyi-236">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">EPIPE</span></code><code class="docutils literal"><span class="pre">ESHUTDOWN</span></code></span></p></dd></dl><dl class="exception"><dt id="ConnectionAbortedError"><span class="yiyi-st" id="yiyi-237"><em class="property">exception </em><code class="descname">ConnectionAbortedError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-238">连接尝试被对等体中止时引发的<a class="reference internal" href="#ConnectionError" title="ConnectionError"><code class="xref py py-exc docutils literal"><span class="pre">ConnectionError</span></code></a>的子类。</span><span class="yiyi-st" id="yiyi-239">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">ECONNABORTED</span></code></span></p></dd></dl><dl class="exception"><dt id="ConnectionRefusedError"><span class="yiyi-st" id="yiyi-240"><em class="property">exception </em><code class="descname">ConnectionRefusedError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-241">连接尝试被对等体拒绝时引发的<a class="reference internal" href="#ConnectionError" title="ConnectionError"><code class="xref py py-exc docutils literal"><span class="pre">ConnectionError</span></code></a>的子类。</span><span class="yiyi-st" id="yiyi-242">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">ECONNREFUSED</span></code></span></p></dd></dl><dl class="exception"><dt id="ConnectionResetError"><span class="yiyi-st" id="yiyi-243"><em class="property">exception </em><code class="descname">ConnectionResetError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-244">当连接被对等体重置时引发的<a class="reference internal" href="#ConnectionError" title="ConnectionError"><code class="xref py py-exc docutils literal"><span class="pre">ConnectionError</span></code></a>的子类。</span><span class="yiyi-st" id="yiyi-245">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">ECONNRESET</span></code></span></p></dd></dl><dl class="exception"><dt id="FileExistsError"><span class="yiyi-st" id="yiyi-246"><em class="property">exception </em><code class="descname">FileExistsError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-247">在尝试创建已存在的文件或目录时引发。</span><span class="yiyi-st" id="yiyi-248">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">EEXIST</span></code></span></p></dd></dl><dl class="exception"><dt id="FileNotFoundError"><span class="yiyi-st" id="yiyi-249"><em class="property">exception </em><code class="descname">FileNotFoundError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-250">在请求文件或目录但不存在时引发。</span><span class="yiyi-st" id="yiyi-251">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">ENOENT</span></code></span></p></dd></dl><dl class="exception"><dt id="InterruptedError"><span class="yiyi-st" id="yiyi-252"><em class="property">exception </em><code class="descname">InterruptedError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-253">在系统调用由传入信号中断时引发。</span><span class="yiyi-st" id="yiyi-254">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <a class="reference internal" href="errno.html#errno.EINTR" title="errno.EINTR"><code class="xref py py-data docutils literal"><span class="pre">EINTR</span></code></a></span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-255"><span class="versionmodified">Changed in version 3.5: </span>Python now retries system calls when a syscall is interrupted by a signal, except if the signal handler raises an exception (see <span class="target" id="index-4"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0475"><strong>PEP 475</strong></a> for the rationale), instead of raising <a class="reference internal" href="#InterruptedError" title="InterruptedError"><code class="xref py py-exc docutils literal"><span class="pre">InterruptedError</span></code></a>.</span></p></div></dd></dl><dl class="exception"><dt id="IsADirectoryError"><span class="yiyi-st" id="yiyi-256"><em class="property">exception </em><code class="descname">IsADirectoryError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-257">在目录上请求文件操作(例如<a class="reference internal" href="os.html#os.remove" title="os.remove"><code class="xref py py-func docutils literal"><span class="pre">os.remove()</span></code></a>)时引发。</span><span class="yiyi-st" id="yiyi-258">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">EISDIR</span></code></span></p></dd></dl><dl class="exception"><dt id="NotADirectoryError"><span class="yiyi-st" id="yiyi-259"><em class="property">exception </em><code class="descname">NotADirectoryError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-260">在对不是目录的某个目录请求目录操作(例如<a class="reference internal" href="os.html#os.listdir" title="os.listdir"><code class="xref py py-func docutils literal"><span class="pre">os.listdir()</span></code></a>)时引发。</span><span class="yiyi-st" id="yiyi-261">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">ENOTDIR</span></code></span></p></dd></dl><dl class="exception"><dt id="PermissionError"><span class="yiyi-st" id="yiyi-262"><em class="property">exception </em><code class="descname">PermissionError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-263">在尝试运行没有足够访问权限的操作(例如文件系统权限)时引发。</span><span class="yiyi-st" id="yiyi-264">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">EACCES</span></code><code class="docutils literal"><span class="pre">EPERM</span></code></span></p></dd></dl><dl class="exception"><dt id="ProcessLookupError"><span class="yiyi-st" id="yiyi-265"><em class="property">exception </em><code class="descname">ProcessLookupError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-266">在给定进程不存在时引发。</span><span class="yiyi-st" id="yiyi-267">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">ESRCH</span></code></span></p></dd></dl><dl class="exception"><dt id="TimeoutError"><span class="yiyi-st" id="yiyi-268"><em class="property">exception </em><code class="descname">TimeoutError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-269">在系统级别的系统函数超时时触发。</span><span class="yiyi-st" id="yiyi-270">对应于<code class="xref c c-data docutils literal"><span class="pre">errno</span></code> <code class="docutils literal"><span class="pre">ETIMEDOUT</span></code></span></p></dd></dl><div class="versionadded"><p><span class="yiyi-st" id="yiyi-271"><span class="versionmodified">版本3.3中的新功能:</span>添加了上述所有<a class="reference internal" href="#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>子类。</span></p></div><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-272">请参阅</span></p><p class="last"><span class="yiyi-st" id="yiyi-273"><span class="target" id="index-5"></span> <a class="pep reference external" href="https://www.python.org/dev/peps/pep-3151"><strong>PEP 3151</strong></a> - 重新修改操作系统和IO异常层次结构</span></p></div></div></div><div class="section" id="warnings"><h2><span class="yiyi-st" id="yiyi-274">5.3.</span><span class="yiyi-st" id="yiyi-275">警告</span></h2><p><span class="yiyi-st" id="yiyi-276">以下例外情况用作警告类别:有关详细信息,请参阅<a class="reference internal" href="warnings.html#module-warnings" title="warnings: Issue warning messages and control their disposition."><code class="xref py py-mod docutils literal"><span class="pre">warnings</span></code></a>模块。</span></p><dl class="exception"><dt id="Warning"><span class="yiyi-st" id="yiyi-277"><em class="property">exception </em><code class="descname">Warning</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-278">警告类别基类。</span></p></dd></dl><dl class="exception"><dt id="UserWarning"><span class="yiyi-st" id="yiyi-279"><em class="property">exception </em><code class="descname">UserWarning</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-280">用户代码生成警告基类。</span></p></dd></dl><dl class="exception"><dt id="DeprecationWarning"><span class="yiyi-st" id="yiyi-281"><em class="property">exception </em><code class="descname">DeprecationWarning</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-282">弃用特性警告基类。</span></p></dd></dl><dl class="exception"><dt id="PendingDeprecationWarning"><span class="yiyi-st" id="yiyi-283"><em class="property">exception</em><code class="descname">PendingDeprecationWarning</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-284">将来会被弃用特性的警告基类。</span></p></dd></dl><dl class="exception"><dt id="SyntaxWarning"><span class="yiyi-st" id="yiyi-285"><em class="property">exception </em><code class="descname">SyntaxWarning</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-286">有关可疑语法的警告的基类。</span></p></dd></dl><dl class="exception"><dt id="RuntimeWarning"><span class="yiyi-st" id="yiyi-287"><em class="property">exception </em><code class="descname">RuntimeWarning</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-288">可疑 Runtime 行为警告基类。</span></p></dd></dl><dl class="exception"><dt id="FutureWarning"><span class="yiyi-st" id="yiyi-289"><em class="property">exception </em><code class="descname">FutureWarning</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-290">将来会改变语义结构的警告基类。</span></p></dd></dl><dl class="exception"><dt id="ImportWarning"><span class="yiyi-st" id="yiyi-291"><em class="property">exception </em><code class="descname">ImportWarning</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-292">可能弄错模块导入警告基类。</span></p></dd></dl><dl class="exception"><dt id="UnicodeWarning"><span class="yiyi-st" id="yiyi-293"><em class="property">exception </em><code class="descname">UnicodeWarning</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-294">Unicode 相关的警告基类。</span></p></dd></dl><dl class="exception"><dt id="BytesWarning"><span class="yiyi-st" id="yiyi-295"><em class="property">exception </em><code class="descname">BytesWarning</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-296"><a class="reference internal" href="functions.html#bytes" title="bytes"><code class="xref py py-class docutils literal"><span class="pre">bytes</span></code></a><a class="reference internal" href="functions.html#bytearray" title="bytearray"><code class="xref py py-class docutils literal"><span class="pre">bytearray</span></code></a>相关的警告的基类。</span></p></dd></dl><dl class="exception"><dt id="ResourceWarning"><span class="yiyi-st" id="yiyi-297"><em class="property">exception </em><code class="descname">ResourceWarning</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-298">与资源使用相关的警告的基类。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-299"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div></dd></dl></div><div class="section" id="exception-hierarchy"><h2><span class="yiyi-st" id="yiyi-300">5.4.</span><span class="yiyi-st" id="yiyi-301">异常层次</span></h2><p><span class="yiyi-st" id="yiyi-302">内建异常的类层次结构是:</span></p><pre><code class="language-python"><span></span><span class="ne">BaseException</span>
<span class="o">+--</span> <span class="ne">SystemExit</span>
<span class="o">+--</span> <span class="ne">KeyboardInterrupt</span>
<span class="o">+--</span> <span class="ne">GeneratorExit</span>
<span class="o">+--</span> <span class="ne">Exception</span>
<span class="o">+--</span> <span class="ne">StopIteration</span>
<span class="o">+--</span> <span class="n">StopAsyncIteration</span>
<span class="o">+--</span> <span class="ne">ArithmeticError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">FloatingPointError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">OverflowError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">ZeroDivisionError</span>
<span class="o">+--</span> <span class="ne">AssertionError</span>
<span class="o">+--</span> <span class="ne">AttributeError</span>
<span class="o">+--</span> <span class="ne">BufferError</span>
<span class="o">+--</span> <span class="ne">EOFError</span>
<span class="o">+--</span> <span class="ne">ImportError</span>
<span class="o">+--</span> <span class="ne">LookupError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">IndexError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">KeyError</span>
<span class="o">+--</span> <span class="ne">MemoryError</span>
<span class="o">+--</span> <span class="ne">NameError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">UnboundLocalError</span>
<span class="o">+--</span> <span class="ne">OSError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">BlockingIOError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">ChildProcessError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">ConnectionError</span>
<span class="o">|</span> <span class="o">|</span> <span class="o">+--</span> <span class="ne">BrokenPipeError</span>
<span class="o">|</span> <span class="o">|</span> <span class="o">+--</span> <span class="ne">ConnectionAbortedError</span>
<span class="o">|</span> <span class="o">|</span> <span class="o">+--</span> <span class="ne">ConnectionRefusedError</span>
<span class="o">|</span> <span class="o">|</span> <span class="o">+--</span> <span class="ne">ConnectionResetError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">FileExistsError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">FileNotFoundError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">InterruptedError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">IsADirectoryError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">NotADirectoryError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">PermissionError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">ProcessLookupError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">TimeoutError</span>
<span class="o">+--</span> <span class="ne">ReferenceError</span>
<span class="o">+--</span> <span class="ne">RuntimeError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">NotImplementedError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="n">RecursionError</span>
<span class="o">+--</span> <span class="ne">SyntaxError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">IndentationError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">TabError</span>
<span class="o">+--</span> <span class="ne">SystemError</span>
<span class="o">+--</span> <span class="ne">TypeError</span>
<span class="o">+--</span> <span class="ne">ValueError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">UnicodeError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">UnicodeDecodeError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">UnicodeEncodeError</span>
<span class="o">|</span> <span class="o">+--</span> <span class="ne">UnicodeTranslateError</span>
<span class="o">+--</span> <span class="ne">Warning</span>
<span class="o">+--</span> <span class="ne">DeprecationWarning</span>
<span class="o">+--</span> <span class="ne">PendingDeprecationWarning</span>
<span class="o">+--</span> <span class="ne">RuntimeWarning</span>
<span class="o">+--</span> <span class="ne">SyntaxWarning</span>
<span class="o">+--</span> <span class="ne">UserWarning</span>
<span class="o">+--</span> <span class="ne">FutureWarning</span>
<span class="o">+--</span> <span class="ne">ImportWarning</span>
<span class="o">+--</span> <span class="ne">UnicodeWarning</span>
<span class="o">+--</span> <span class="ne">BytesWarning</span>
<span class="o">+--</span> <span class="ne">ResourceWarning</span>
</code></pre></div></div></div>