5. 內建的例外¶
In Python, all exceptions must be instances of a class that derives from
BaseException. In a try statement with an except
clause that mentions a particular class, that clause also handles any exception
classes derived from that class (but not exception classes from which it is
derived). Two exception classes that are not related via subclassing are never
equivalent, even if they have the same name.
The built-in exceptions listed below can be generated by the interpreter or built-in functions. Except where mentioned, they have an 「associated value」 indicating the detailed cause of the error. This may be a string or a tuple of several items of information (e.g., an error code and a string explaining the code). The associated value is usually passed as arguments to the exception class’s constructor.
User code can raise built-in exceptions. This can be used to test an exception handler or to report an error condition 「just like」 the situation in which the interpreter raises the same exception; but beware that there is nothing to prevent user code from raising an inappropriate error.
The built-in exception classes can be subclassed to define new exceptions;
programmers are encouraged to derive new exceptions from the Exception
class or one of its subclasses, and not from BaseException. More
information on defining exceptions is available in the Python Tutorial under
User-defined Exceptions.
When raising (or re-raising) an exception in an except or
finally clause
__context__ is automatically set to the last exception caught; if the
new exception is not handled the traceback that is eventually displayed will
include the originating exception(s) and the final exception.
When raising a new exception (rather than using a bare raise to re-raise
the exception currently being handled), the implicit exception context can be
supplemented with an explicit cause by using from with
raise:
raise new_exc from original_exc
The expression following from must be an exception or None. It
will be set as __cause__ on the raised exception. Setting
__cause__ also implicitly sets the __suppress_context__
attribute to True, so that using raise new_exc from None
effectively replaces the old exception with the new one for display
purposes (e.g. converting KeyError to AttributeError, while
leaving the old exception available in __context__ for introspection
when debugging.
The default traceback display code shows these chained exceptions in
addition to the traceback for the exception itself. An explicitly chained
exception in __cause__ is always shown when present. An implicitly
chained exception in __context__ is shown only if __cause__
is None and __suppress_context__ is false.
In either case, the exception itself is always shown after any chained exceptions so that the final line of the traceback always shows the last exception that was raised.
5.1. Base classes¶
The following exceptions are used mostly as base classes for other exceptions.
-
exception
BaseException¶ The base class for all built-in exceptions. It is not meant to be directly inherited by user-defined classes (for that, use
Exception). Ifstr()is called on an instance of this class, the representation of the argument(s) to the instance are returned, or the empty string when there were no arguments.-
args¶ The tuple of arguments given to the exception constructor. Some built-in exceptions (like
OSError) expect a certain number of arguments and assign a special meaning to the elements of this tuple, while others are usually called only with a single string giving an error message.
-
with_traceback(tb)¶ This method sets tb as the new traceback for the exception and returns the exception object. It is usually used in exception handling code like this:
try: ... except SomeException: tb = sys.exc_info()[2] raise OtherException(...).with_traceback(tb)
-
-
exception
Exception¶ All built-in, non-system-exiting exceptions are derived from this class. All user-defined exceptions should also be derived from this class.
-
exception
ArithmeticError¶ The base class for those built-in exceptions that are raised for various arithmetic errors:
OverflowError,ZeroDivisionError,FloatingPointError.
-
exception
LookupError¶ The base class for the exceptions that are raised when a key or index used on a mapping or sequence is invalid:
IndexError,KeyError. This can be raised directly bycodecs.lookup().
5.2. Concrete exceptions¶
The following exceptions are the exceptions that are usually raised.
-
exception
AttributeError¶ Raised when an attribute reference (see Attribute references) or assignment fails. (When an object does not support attribute references or attribute assignments at all,
TypeErroris raised.)
-
exception
EOFError¶ Raised when the
input()function hits an end-of-file condition (EOF) without reading any data. (N.B.: theio.IOBase.read()andio.IOBase.readline()methods return an empty string when they hit EOF.)
-
exception
FloatingPointError¶ Not currently used.
-
exception
GeneratorExit¶ Raised when a generator or coroutine is closed; see
generator.close()andcoroutine.close(). It directly inherits fromBaseExceptioninstead ofExceptionsince it is technically not an error.
-
exception
ImportError¶ Raised when the
importstatement has troubles trying to load a module. Also raised when the 「from list」 infrom ... importhas a name that cannot be found.The
nameandpathattributes can be set using keyword-only arguments to the constructor. When set they represent the name of the module that was attempted to be imported and the path to any file which triggered the exception, respectively.3.3 版更變: Added the
nameandpathattributes.
-
exception
ModuleNotFoundError¶ A subclass of
ImportErrorwhich is raised byimportwhen a module could not be located. It is also raised whenNoneis found insys.modules.3.6 版新加入.
-
exception
IndexError¶ Raised when a sequence subscript is out of range. (Slice indices are silently truncated to fall in the allowed range; if an index is not an integer,
TypeErroris raised.)
-
exception
KeyError¶ Raised when a mapping (dictionary) key is not found in the set of existing keys.
-
exception
KeyboardInterrupt¶ Raised when the user hits the interrupt key (normally Control-C or Delete). During execution, a check for interrupts is made regularly. The exception inherits from
BaseExceptionso as to not be accidentally caught by code that catchesExceptionand thus prevent the interpreter from exiting.
-
exception
MemoryError¶ Raised when an operation runs out of memory but the situation may still be rescued (by deleting some objects). The associated value is a string indicating what kind of (internal) operation ran out of memory. Note that because of the underlying memory management architecture (C’s
malloc()function), the interpreter may not always be able to completely recover from this situation; it nevertheless raises an exception so that a stack traceback can be printed, in case a run-away program was the cause.
-
exception
NameError¶ Raised when a local or global name is not found. This applies only to unqualified names. The associated value is an error message that includes the name that could not be found.
-
exception
NotImplementedError¶ This exception is derived from
RuntimeError. In user defined base classes, abstract methods should raise this exception when they require derived classes to override the method, or while the class is being developed to indicate that the real implementation still needs to be added.備註
It should not be used to indicate that an operator or method is not meant to be supported at all – in that case either leave the operator / method undefined or, if a subclass, set it to
None.備註
NotImplementedErrorandNotImplementedare not interchangeable, even though they have similar names and purposes. SeeNotImplementedfor details on when to use it.
-
exception
OSError([arg])¶ -
exception
OSError(errno, strerror[, filename[, winerror[, filename2]]]) 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).
The second form of the constructor sets the corresponding attributes, described below. The attributes default to
Noneif not specified. For backwards compatibility, if three arguments are passed, theargsattribute contains only a 2-tuple of the first two constructor arguments.The constructor often actually returns a subclass of
OSError, as described in OS exceptions below. The particular subclass depends on the finalerrnovalue. This behaviour only occurs when constructingOSErrordirectly or via an alias, and is not inherited when subclassing.-
errno¶ A numeric error code from the C variable
errno.
-
winerror¶ Under Windows, this gives you the native Windows error code. The
errnoattribute is then an approximate translation, in POSIX terms, of that native error code.Under Windows, if the winerror constructor argument is an integer, the
errnoattribute is determined from the Windows error code, and the errno argument is ignored. On other platforms, the winerror argument is ignored, and thewinerrorattribute does not exist.
-
strerror¶ The corresponding error message, as provided by the operating system. It is formatted by the C functions
perror()under POSIX, andFormatMessage()under Windows.
-
filename¶ -
filename2¶ For exceptions that involve a file system path (such as
open()oros.unlink()),filenameis the file name passed to the function. For functions that involve two file system paths (such asos.rename()),filename2corresponds to the second file name passed to the function.
3.3 版更變:
EnvironmentError,IOError,WindowsError,socket.error,select.errorandmmap.errorhave been merged intoOSError, and the constructor may return a subclass.3.4 版更變: The
filenameattribute is now the original file name passed to the function, instead of the name encoded to or decoded from the filesystem encoding. Also, the filename2 constructor argument and attribute was added.-
-
exception
OverflowError¶ Raised when the result of an arithmetic operation is too large to be represented. This cannot occur for integers (which would rather raise
MemoryErrorthan give up). However, for historical reasons, OverflowError is sometimes raised for integers that are outside a required range. Because of the lack of standardization of floating point exception handling in C, most floating point operations are not checked.
-
exception
RecursionError¶ This exception is derived from
RuntimeError. It is raised when the interpreter detects that the maximum recursion depth (seesys.getrecursionlimit()) is exceeded.3.5 版新加入: Previously, a plain
RuntimeErrorwas raised.
-
exception
ReferenceError¶ This exception is raised when a weak reference proxy, created by the
weakref.proxy()function, is used to access an attribute of the referent after it has been garbage collected. For more information on weak references, see theweakrefmodule.
-
exception
RuntimeError¶ Raised when an error is detected that doesn’t fall in any of the other categories. The associated value is a string indicating what precisely went wrong.
-
exception
StopIteration¶ Raised by built-in function
next()and an iterator’s__next__()method to signal that there are no further items produced by the iterator.The exception object has a single attribute
value, which is given as an argument when constructing the exception, and defaults toNone.When a generator or coroutine function returns, a new
StopIterationinstance is raised, and the value returned by the function is used as thevalueparameter to the constructor of the exception.If a generator code directly or indirectly raises
StopIteration, it is converted into aRuntimeError(retaining theStopIterationas the new exception’s cause).3.3 版更變: Added
valueattribute and the ability for generator functions to use it to return a value.3.5 版更變: Introduced the RuntimeError transformation via
from __future__ import generator_stop, see PEP 479.3.7 版更變: Enable PEP 479 for all code by default: a
StopIterationerror raised in a generator is transformed into aRuntimeError.
-
exception
StopAsyncIteration¶ Must be raised by
__anext__()method of an asynchronous iterator object to stop the iteration.3.5 版新加入.
-
exception
SyntaxError¶ Raised when the parser encounters a syntax error. This may occur in an
importstatement, in a call to the built-in functionsexec()oreval(), or when reading the initial script or standard input (also interactively).Instances of this class have attributes
filename,lineno,offsetandtextfor easier access to the details.str()of the exception instance returns only the message.
-
exception
IndentationError
