# SOME DESCRIPTIVE TITLE. # Copyright (C) 2001-2018, Python Software Foundation # This file is distributed under the same license as the Python package. # # Translators: # jerrychen , 2016 msgid "" msgstr "" "Project-Id-Version: Python 3.7\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-20 18:08+0800\n" "PO-Revision-Date: 2018-05-23 16:18+0000\n" "Last-Translator: Adrian Liaw \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" "tw)\n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../../tutorial/errors.rst:5 msgid "Errors and Exceptions" msgstr "錯誤和例外" #: ../../tutorial/errors.rst:7 msgid "" "Until now error messages haven't been more than mentioned, but if you have " "tried out the examples you have probably seen some. There are (at least) " "two distinguishable kinds of errors: *syntax errors* and *exceptions*." msgstr "" #: ../../tutorial/errors.rst:15 msgid "Syntax Errors" msgstr "語法錯誤" #: ../../tutorial/errors.rst:17 msgid "" "Syntax errors, also known as parsing errors, are perhaps the most common " "kind of complaint you get while you are still learning Python::" msgstr "" #: ../../tutorial/errors.rst:26 msgid "" "The parser repeats the offending line and displays a little 'arrow' pointing " "at the earliest point in the line where the error was detected. The error " "is caused by (or at least detected at) the token *preceding* the arrow: in " "the example, the error is detected at the function :func:`print`, since a " "colon (``':'``) is missing before it. File name and line number are printed " "so you know where to look in case the input came from a script." msgstr "" #: ../../tutorial/errors.rst:37 msgid "Exceptions" msgstr "例外" #: ../../tutorial/errors.rst:39 msgid "" "Even if a statement or expression is syntactically correct, it may cause an " "error when an attempt is made to execute it. Errors detected during " "execution are called *exceptions* and are not unconditionally fatal: you " "will soon learn how to handle them in Python programs. Most exceptions are " "not handled by programs, however, and result in error messages as shown " "here::" msgstr "" #: ../../tutorial/errors.rst:58 msgid "" "The last line of the error message indicates what happened. Exceptions come " "in different types, and the type is printed as part of the message: the " "types in the example are :exc:`ZeroDivisionError`, :exc:`NameError` and :exc:" "`TypeError`. The string printed as the exception type is the name of the " "built-in exception that occurred. This is true for all built-in exceptions, " "but need not be true for user-defined exceptions (although it is a useful " "convention). Standard exception names are built-in identifiers (not reserved " "keywords)." msgstr "" #: ../../tutorial/errors.rst:66 msgid "" "The rest of the line provides detail based on the type of exception and what " "caused it." msgstr "" #: ../../tutorial/errors.rst:69 msgid "" "The preceding part of the error message shows the context where the " "exception occurred, in the form of a stack traceback. In general it contains " "a stack traceback listing source lines; however, it will not display lines " "read from standard input." msgstr "" #: ../../tutorial/errors.rst:74 msgid "" ":ref:`bltin-exceptions` lists the built-in exceptions and their meanings." msgstr "" #: ../../tutorial/errors.rst:80 msgid "Handling Exceptions" msgstr "處理例外" #: ../../tutorial/errors.rst:82 msgid "" "It is possible to write programs that handle selected exceptions. Look at " "the following example, which asks the user for input until a valid integer " "has been entered, but allows the user to interrupt the program (using :kbd:" "`Control-C` or whatever the operating system supports); note that a user-" "generated interruption is signalled by raising the :exc:`KeyboardInterrupt` " "exception. ::" msgstr "" #: ../../tutorial/errors.rst:96 msgid "The :keyword:`try` statement works as follows." msgstr "" #: ../../tutorial/errors.rst:98 msgid "" "First, the *try clause* (the statement(s) between the :keyword:`try` and :" "keyword:`except` keywords) is executed." msgstr "" #: ../../tutorial/errors.rst:101 msgid "" "If no exception occurs, the *except clause* is skipped and execution of the :" "keyword:`try` statement is finished." msgstr "" #: ../../tutorial/errors.rst:104 msgid "" "If an exception occurs during execution of the try clause, the rest of the " "clause is skipped. Then if its type matches the exception named after the :" "keyword:`except` keyword, the except clause is executed, and then execution " "continues after the :keyword:`try` statement." msgstr "" #: ../../tutorial/errors.rst:109 msgid "" "If an exception occurs which does not match the exception named in the " "except clause, it is passed on to outer :keyword:`try` statements; if no " "handler is found, it is an *unhandled exception* and execution stops with a " "message as shown above." msgstr "" #: ../../tutorial/errors.rst:114 msgid "" "A :keyword:`try` statement may have more than one except clause, to specify " "handlers for different exceptions. At most one handler will be executed. " "Handlers only handle exceptions that occur in the corresponding try clause, " "not in other handlers of the same :keyword:`!try` statement. An except " "clause may name multiple exceptions as a parenthesized tuple, for example::" msgstr "" #: ../../tutorial/errors.rst:123 msgid "" "A class in an :keyword:`except` clause is compatible with an exception if it " "is the same class or a base class thereof (but not the other way around --- " "an except clause listing a derived class is not compatible with a base " "class). For example, the following code will print B, C, D in that order::" msgstr "" #: ../../tutorial/errors.rst:147 msgid "" "Note that if the except clauses were reversed (with ``except B`` first), it " "would have printed B, B, B --- the first matching except clause is triggered." msgstr "" #: ../../tutorial/errors.rst:150 msgid "" "The last except clause may omit the exception name(s), to serve as a " "wildcard. Use this with extreme caution, since it is easy to mask a real " "programming error in this way! It can also be used to print an error " "message and then re-raise the exception (allowing a caller to handle the " "exception as well)::" msgstr "" #: ../../tutorial/errors.rst:169 msgid "" "The :keyword:`try` ... :keyword:`except` statement has an optional *else " "clause*, which, when present, must follow all except clauses. It is useful " "for code that must be executed if the try clause does not raise an " "exception. For example::" msgstr "" #: ../../tutorial/errors.rst:183 msgid "" "The use of the :keyword:`!else` clause is better than adding additional code " "to the :keyword:`try` clause because it avoids accidentally catching an " "exception that wasn't raised by the code being protected by the :keyword:`!" "try` ... :keyword:`!except` statement." msgstr "" #: ../../tutorial/errors.rst:188 msgid "" "When an exception occurs, it may have an associated value, also known as the " "exception's *argument*. The presence and type of the argument depend on the " "exception type." msgstr "" #: ../../tutorial/errors.rst:192 msgid "" "The except clause may specify a variable after the exception name. The " "variable is bound to an exception instance with the arguments stored in " "``instance.args``. For convenience, the exception instance defines :meth:" "`__str__` so the arguments can be printed directly without having to " "reference ``.args``. One may also instantiate an exception first before " "raising it and add any attributes to it as desired. ::" msgstr "" #: ../../tutorial/errors.rst:216 msgid "" "If an exception has arguments, they are printed as the last part ('detail') " "of the message for unhandled exceptions." msgstr "" #: ../../tutorial/errors.rst:219 msgid "" "Exception handlers don't just handle exceptions if they occur immediately in " "the try clause, but also if they occur inside functions that are called " "(even indirectly) in the try clause. For example::" msgstr "" #: ../../tutorial/errors.rst:237 msgid "Raising Exceptions" msgstr "" #: ../../tutorial/errors.rst:239 msgid "" "The :keyword:`raise` statement allows the programmer to force a specified " "exception to occur. For example::" msgstr "" #: ../../tutorial/errors.rst:247 msgid "" "The sole argument to :keyword:`raise` indicates the exception to be raised. " "This must be either an exception instance or an exception class (a class " "that derives from :class:`Exception`). If an exception class is passed, it " "will be implicitly instantiated by calling its constructor with no " "arguments::" msgstr "" #: ../../tutorial/errors.rst:254 msgid "" "If you need to determine whether an exception was raised but don't intend to " "handle it, a simpler form of the :keyword:`raise` statement allows you to re-" "raise the exception::" msgstr "" #: ../../tutorial/errors.rst:273 #, fuzzy msgid "Exception Chaining" msgstr "例外" #: ../../tutorial/errors.rst:275 msgid "" "The :keyword:`raise` statement allows an optional :keyword:`from` which " "enables chaining exceptions by setting the ``__cause__`` attribute of the " "raised exception. For example::" msgstr "" #: ../../tutorial/errors.rst:281 msgid "This can be useful when you are transforming exceptions. For example::" msgstr "" #: ../../tutorial/errors.rst:302 msgid "" "The expression following the :keyword:`from` must be either an exception or " "``None``. Exception chaining happens automatically when an exception is " "raised inside an exception handler or :keyword:`finally` section. Exception " "chaining can be disabled by using ``from None`` idiom:" msgstr "" #: ../../tutorial/errors.rst:320 msgid "User-defined Exceptions" msgstr "" #: ../../tutorial/errors.rst:322 msgid "" "Programs may name their own exceptions by creating a new exception class " "(see :ref:`tut-classes` for more about Python classes). Exceptions should " "typically be derived from the :exc:`Exception` class, either directly or " "indirectly." msgstr "" #: ../../tutorial/errors.rst:326 msgid "" "Exception classes can be defined which do anything any other class can do, " "but are usually kept simple, often only offering a number of attributes that " "allow information about the error to be extracted by handlers for the " "exception. When creating a module that can raise several distinct errors, a " "common practice is to create a base class for exceptions defined by that " "module, and subclass that to create specific exception classes for different " "error conditions::" msgstr "" #: ../../tutorial/errors.rst:364 msgid "" "Most exceptions are defined with names that end in \"Error\", similar to the " "naming of the standard exceptions." msgstr "" #: ../../tutorial/errors.rst:367 msgid "" "Many standard modules define their own exceptions to report errors that may " "occur in functions they define. More information on classes is presented in " "chapter :ref:`tut-classes`." msgstr "" #: ../../tutorial/errors.rst:375 msgid "Defining Clean-up Actions" msgstr "" #: ../../tutorial/errors.rst:377 msgid "" "The :keyword:`try` statement has another optional clause which is intended " "to define clean-up actions that must be executed under all circumstances. " "For example::" msgstr "" #: ../../tutorial/errors.rst:391 msgid "" "If a :keyword:`finally` clause is present, the :keyword:`!finally` clause " "will execute as the last task before the :keyword:`try` statement completes. " "The :keyword:`!finally` clause runs whether or not the :keyword:`!try` " "statement produces an exception. The following points discuss more complex " "cases when an exception occurs:" msgstr "" #: ../../tutorial/errors.rst:397 msgid "" "If an exception occurs during execution of the :keyword:`!try` clause, the " "exception may be handled by an :keyword:`except` clause. If the exception is " "not handled by an :keyword:`!except` clause, the exception is re-raised " "after the :keyword:`!finally` clause has been executed." msgstr "" #: ../../tutorial/errors.rst:403 msgid "" "An exception could occur during execution of an :keyword:`!except` or :" "keyword:`!else` clause. Again, the exception is re-raised after the :keyword:" "`!finally` clause has been executed." msgstr "" #: ../../tutorial/errors.rst:407 msgid "" "If the :keyword:`!try` statement reaches a :keyword:`break`, :keyword:" "`continue` or :keyword:`return` statement, the :keyword:`!finally` clause " "will execute just prior to the :keyword:`!break`, :keyword:`!continue` or :" "keyword:`!return` statement's execution." msgstr "" #: ../../tutorial/errors.rst:413 msgid "" "If a :keyword:`!finally` clause includes a :keyword:`!return` statement, the " "returned value will be the one from the :keyword:`!finally` clause's :" "keyword:`!return` statement, not the value from the :keyword:`!try` " "clause's :keyword:`!return` statement." msgstr "" #: ../../tutorial/errors.rst:419 msgid "For example::" msgstr "" #: ../../tutorial/errors.rst:430 msgid "A more complicated example::" msgstr "" #: ../../tutorial/errors.rst:455 msgid "" "As you can see, the :keyword:`finally` clause is executed in any event. " "The :exc:`TypeError` raised by dividing two strings is not handled by the :" "keyword:`except` clause and therefore re-raised after the :keyword:`!" "finally` clause has been executed." msgstr "" #: ../../tutorial/errors.rst:460 msgid "" "In real world applications, the :keyword:`finally` clause is useful for " "releasing external resources (such as files or network connections), " "regardless of whether the use of the resource was successful." msgstr "" #: ../../tutorial/errors.rst:468 msgid "Predefined Clean-up Actions" msgstr "" #: ../../tutorial/errors.rst:470 msgid "" "Some objects define standard clean-up actions to be undertaken when the " "object is no longer needed, regardless of whether or not the operation using " "the object succeeded or failed. Look at the following example, which tries " "to open a file and print its contents to the screen. ::" msgstr "" #: ../../tutorial/errors.rst:478 msgid "" "The problem with this code is that it leaves the file open for an " "indeterminate amount of time after this part of the code has finished " "executing. This is not an issue in simple scripts, but can be a problem for " "larger applications. The :keyword:`with` statement allows objects like files " "to be used in a way that ensures they are always cleaned up promptly and " "correctly. ::" msgstr "" #: ../../tutorial/errors.rst:488 msgid "" "After the statement is executed, the file *f* is always closed, even if a " "problem was encountered while processing the lines. Objects which, like " "files, provide predefined clean-up actions will indicate this in their " "documentation." msgstr ""