# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2001 Python Software Foundation
# This file is distributed under the same license as the Python package.
# FIRST AUTHOR , YEAR.
#
# Translators:
# python-doc bot, 2025
#
msgid ""
msgstr ""
"Project-Id-Version: Python 3.15\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-22 12:07+0200\n"
"PO-Revision-Date: 2025-09-16 00:02+0000\n"
"Last-Translator: Swen Bachmann <[email protected]>\n"
"Language-Team: German (https://app.transifex.com/python-doc/teams/5390/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../../tutorial/errors.rst:5
msgid "Errors and Exceptions"
msgstr "Fehler und Ausnahmen"
#: ../../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 ""
"Bis jetzt wurden Fehlermeldungen nur erwähnt, aber wenn du die Beispiele "
"ausprobiert hast, hast du wahrscheinlich einige gesehen. Es gibt "
"(mindestens) zwei Arten von Fehlern, die man unterscheiden kann: "
"*Syntaxfehler* und *Ausnahmen*."
#: ../../tutorial/errors.rst:15
msgid "Syntax Errors"
msgstr "Syntax Fehler"
#: ../../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 ""
"Syntaxfehler, auch bekannt als Parsing-Fehler, sind vielleicht die häufigste "
"Art von Beschwerden, die man bekommt, wenn man Python noch lernt::"
#: ../../tutorial/errors.rst:20
msgid ""
">>> while True print('Hello world')\n"
" File \"\", line 1\n"
" while True print('Hello world')\n"
" ^^^^^\n"
"SyntaxError: invalid syntax"
msgstr ""
">>> while True print('Hello world')\n"
" File \"\", line 1\n"
" while True print('Hello world')\n"
" ^^^^^\n"
"SyntaxError: invalid syntax"
#: ../../tutorial/errors.rst:26
msgid ""
"The parser repeats the offending line and displays little arrows pointing at "
"the place where the error was detected. Note that this is not always the "
"place that needs to be fixed. In the example, the error is detected at the "
"function :func:`print`, since a colon (``':'``) is missing just before it."
msgstr ""
"Der Parser wiederholt die fehlerhafte Zeile und zeigt kleine Pfeile an, die "
"auf die Stelle verweisen, an der der Fehler erkannt wurde. Beachte, dass "
"dies nicht immer die Stelle ist, die korrigiert werden muss. Im Beispiel "
"wird der Fehler bei der Funktions :func:`print` erkannt, da unmittelbar "
"davor ein Doppelpunkt (``':'``) fehlt."
#: ../../tutorial/errors.rst:31
msgid ""
"The file name (```` in our example) and line number are printed so "
"you know where to look in case the input came from a file."
msgstr ""
"Der Dateiname (in unserem Beispiel ```` ) und die Zeilennummer werden "
"angezeigt, damit du weisst, wo du nachsehen musst, falls die Eingabe aus "
"einer Datei stammt."
#: ../../tutorial/errors.rst:38
msgid "Exceptions"
msgstr "Ausnahmen"
#: ../../tutorial/errors.rst:40
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 ""
"Auch wenn eine Anweisung oder ein Ausdruck syntaktisch korrekt ist, kann es "
"zu einem Fehler kommen, wenn man versucht, sie auszuführen. Fehler, die "
"während der Ausführung entdeckt werden, werden *Ausnahmen* genannt und sind "
"nicht unbedingt fatal: Du wirst bald lernen, wie man sie in Python-"
"Programmen behandelt. Die meisten Ausnahmen werden jedoch nicht von "
"Programmen behandelt und führen zu Fehlermeldungen wie hier gezeigt::"
#: ../../tutorial/errors.rst:46
msgid ""
">>> 10 * (1/0)\n"
"Traceback (most recent call last):\n"
" File \"\", line 1, in \n"
" 10 * (1/0)\n"
" ~^~\n"
"ZeroDivisionError: division by zero\n"
">>> 4 + spam*3\n"
"Traceback (most recent call last):\n"
" File \"\", line 1, in \n"
" 4 + spam*3\n"
" ^^^^\n"
"NameError: name 'spam' is not defined\n"
">>> '2' + 2\n"
"Traceback (most recent call last):\n"
" File \"\", line 1, in \n"
" '2' + 2\n"
" ~~~~^~~\n"
"TypeError: can only concatenate str (not \"int\") to str"
msgstr ""
">>> 10 * (1/0)\n"
"Traceback (most recent call last):\n"
" File \"\", line 1, in \n"
" 10 * (1/0)\n"
" ~^~\n"
"ZeroDivisionError: division by zero\n"
">>> 4 + spam*3\n"
"Traceback (most recent call last):\n"
" File \"\", line 1, in \n"
" 4 + spam*3\n"
" ^^^^\n"
"NameError: name 'spam' is not defined\n"
">>> '2' + 2\n"
"Traceback (most recent call last):\n"
" File \"\", line 1, in \n"
" '2' + 2\n"
" ~~~~^~~\n"
"TypeError: can only concatenate str (not \"int\") to str"
#: ../../tutorial/errors.rst:65
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 ""
"In der letzten Zeile der Fehlermeldung steht, was passiert ist. Ausnahmen "
"gibt es in verschiedenen Typen, und der Typ wird als Teil der Meldung "
"ausgegeben: Die Typen im Beispiel sind :exc:`ZeroDivisionError`, :exc:"
"`NameError` und :exc:`TypeError`. Die als Ausnahmetyp ausgegebene "
"Zeichenkette ist der Name der aufgetretenen integrierten Ausnahme. Dies gilt "
"für alle integrierten Ausnahmen, muss aber nicht für benutzerdefinierte "
"Ausnahmen gelten (obwohl es eine nützliche Konvention ist). "
"Standardausnahmenamen sind integrierte Bezeichner (keine reservierten "
"Schlüsselwörter)."
#: ../../tutorial/errors.rst:73
msgid ""
"The rest of the line provides detail based on the type of exception and what "
"caused it."
msgstr ""
"Der Rest der Zeile enthält detaillierte Informationen über die Art der "
"Ausnahme und deren Ursache."
#: ../../tutorial/errors.rst:76
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 ""
"Der vorangehende Teil der Fehlermeldung zeigt den Kontext, in dem die "
"Ausnahme aufgetreten ist, in Form eines Stack-Tracebacks. Im Allgemeinen "
"enthält er einen Stack-Traceback, der die Zeilen des Quellcodes auflistet; "
"er zeigt jedoch keine Zeilen an, die von der Standardeingabe gelesen wurden."
#: ../../tutorial/errors.rst:81
msgid ""
":ref:`bltin-exceptions` lists the built-in exceptions and their meanings."
msgstr ""
":ref:`bltin-exceptions` listet die integrierten Ausnahmen und ihre "
"Bedeutungen auf."
#: ../../tutorial/errors.rst:87
msgid "Handling Exceptions"
msgstr "Behandlung von Ausnahmen"
#: ../../tutorial/errors.rst:89
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 ""
"Es ist möglich, Programme zu schreiben, die ausgewählte Ausnahmen behandeln. "
"Schau dir das folgende Beispiel an, das den Benutzer zur Eingabe auffordert, "
"bis ein gültiger Integer eingegeben wurde, dem Benutzer aber erlaubt, das "
"Programm zu unterbrechen (mit :kbd:`Control-C` oder was auch immer das "
"Betriebssystem unterstützt); beachte, dass eine vom Benutzer erzeugte "
"Unterbrechung durch das Auslösen der Ausnahme :exc:`KeyboardInterrupt` "
"signalisiert wird. ::"
#: ../../tutorial/errors.rst:95
msgid ""
">>> while True:\n"
"... try:\n"
"... x = int(input(\"Please enter a number: \"))\n"
"... break\n"
"... except ValueError:\n"
"... print(\"Oops! That was no valid number. Try again...\")\n"
"..."
msgstr ""
">>> while True:\n"
"... try:\n"
"... x = int(input(\"Please enter a number: \"))\n"
"... break\n"
"... except ValueError:\n"
"... print(\"Oops! That was no valid number. Try again...\")\n"
"..."
#: ../../tutorial/errors.rst:103
msgid "The :keyword:`try` statement works as follows."
msgstr "Die :keyword:`try` Anweisung funktioniert wie folgt."
#: ../../tutorial/errors.rst:105
msgid ""
"First, the *try clause* (the statement(s) between the :keyword:`try` and :"
"keyword:`except` keywords) is executed."
msgstr ""
"Zuerst wird die *Try-Klausel* (Die Anweisung(en) zwischen den "
"Schlüsselwörtern :keyword:`try` und :keyword:`except`) ausgeführt."
#: ../../tutorial/errors.rst:108
msgid ""
"If no exception occurs, the *except clause* is skipped and execution of the :"
"keyword:`try` statement is finished."
msgstr ""
"Wenn keine Ausnahme auftritt, wird die *except-Klausel* übersprungen, und "
"die Ausführung der :keyword:`try`-Anweisung ist abgeschlossen."
#: ../../tutorial/errors.rst:111
msgid ""
"If an exception occurs during execution of the :keyword:`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 try/except block."
msgstr ""
"Wenn während der Ausführung der :keyword:`try` Klausel eine Ausnahme "
"auftritt, wird der Rest der Klausel übersprungen. Wenn der Typ der Ausnahme "
"mit der nach dem :keyword:`except` Schlüsselwort genannten Ausnahme "
"übereinstimmt, wird die *Except-Klausel* ausgeführt, und die Ausführung wird "
"nach dem try/except-Block fortgesetzt."
#: ../../tutorial/errors.rst:116
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 an "
"error message."
msgstr ""
"Tritt eine Ausnahme auf, die nicht mit der in der *Except-Klausel* genannten "
"Ausnahme übereinstimmt, wird sie an äuÃere :keyword:`try` Anweisungen "
"weitergegeben; wird kein Handler gefunden, handelt es sich um eine "
"*unbehandelte Ausnahme* und die Ausführung wird mit einer Fehlermeldung "
"beendet."
#: ../../tutorial/errors.rst:120
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, for example::"
msgstr ""
"Eine :keyword:`try`-Anweisung kann mehr als eine *except-Klausel* haben, um "
"Handler für unterschiedliche Ausnahmen anzugeben. Höchstens ein Handler wird "
"ausgeführt. Handler behandeln nur Ausnahmen, die in der entsprechenden *try-"
"Klausel* auftreten, nicht in anderen Handlern derselben :keyword:`!try`-"
"Anweisung. Eine *except-Klausel* kann mehrere Ausnahmen benennen, zum "
"Beispiel::"
#: ../../tutorial/errors.rst:126
msgid ""
"... except RuntimeError, TypeError, NameError:\n"
"... pass"
msgstr ""
"... except RuntimeError, TypeError, NameError:\n"
"... pass"
#: ../../tutorial/errors.rst:129
msgid ""
"A class in an :keyword:`except` clause matches exceptions which are "
"instances of the class itself or one of its derived classes (but not the "
"other way around --- an *except clause* listing a derived class does not "
"match instances of its base classes). For example, the following code will "
"print B, C, D in that order::"
msgstr ""
"Eine Klasse in einer :keyword:`except`-Klausel deckt Ausnahmen ab, bei "
"denen es sich um Instanzen dieser Klasse selbst oder einer ihrer "
"abgeleiteten Klassen handelt (jedoch nicht umgekehrt â eine *exceptâ-"
"Klausel*, in der eine abgeleitete Klasse aufgeführt ist, deckt keine "
"Instanzen ihrer Basisklassen ab). Der folgende Code gibt beispielsweise B, C "
"und D in dieser Reihenfolge aus:"
#: ../../tutorial/errors.rst:134
msgid ""
"class B(Exception):\n"
" pass\n"
"\n"
"class C(B):\n"
" pass\n"
"\n"
"class D(C):\n"
" pass\n"
"\n"
"for cls in [B, C, D]:\n"
" try:\n"
" raise cls()\n"
" except D:\n"
" print(\"D\")\n"
" except C:\n"
" print(\"C\")\n"
" except B:\n"
" print(\"B\")"
msgstr ""
"class B(Exception):\n"
" pass\n"
"\n"
"class C(B):\n"
" pass\n"
"\n"
"class D(C):\n"
" pass\n"
"\n"
"for cls in [B, C, D]:\n"
" try:\n"
" raise cls()\n"
" except D:\n"
" print(\"D\")\n"
" except C:\n"
" print(\"C\")\n"
" except B:\n"
" print(\"B\")"
#: ../../tutorial/errors.rst:153
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 ""
"Beachte, dass, wenn die *Exception-Klauseln* umgekehrt wären (mit ``except "
"B`` zuerst), B, B, B ausgegeben worden wäre --- die erste passende "
"*Exception-Klausel* wird ausgelöst."
#: ../../tutorial/errors.rst:156
msgid ""
"When an exception occurs, it may have associated values, also known as the "
"exception's *arguments*. The presence and types of the arguments depend on "
"the exception type."
msgstr ""
"Wenn eine Ausnahme auftritt, kann sie mit Werten verbunden sein, die auch "
"als *Argumente* der Ausnahme bezeichnet werden. Das Vorhandensein und die "
"Art der Argumente hängen von der Art der Ausnahme ab."
#: ../../tutorial/errors.rst:160
msgid ""
"The *except clause* may specify a variable after the exception name. The "
"variable is bound to the exception instance which typically has an ``args`` "
"attribute that stores the arguments. For convenience, builtin exception "
"types define :meth:`~object.__str__` to print all the arguments without "
"explicitly accessing ``.args``. ::"
msgstr ""
"In der *Except-Klausel* kann nach dem Namen der Ausnahme eine Variable "
"angegeben werden. Die Variable ist an die Ausnahmen-Instanz gebunden, die "
"typischerweise ein ``args`` Attribut hat, das die Argumente speichert. Der "
"Einfachheit halber definieren integrierte Ausnahmetypen :meth:`~object."
"__str__`, um alle Argumente auszugeben, ohne explizit auf ``.args`` "
"zuzugreifen. ::"
#: ../../tutorial/errors.rst:166
msgid ""
">>> try:\n"
"... raise Exception('spam', 'eggs')\n"
"... except Exception as inst:\n"
"... print(type(inst)) # the exception type\n"
"... print(inst.args) # arguments stored in .args\n"
"... print(inst) # __str__ allows args to be printed directly,\n"
"... # but may be overridden in exception "
"subclasses\n"
"... x, y = inst.args # unpack args\n"
"... print('x =', x)\n"
"... print('y =', y)\n"
"...\n"
"\n"
"('spam', 'eggs')\n"
"('spam', 'eggs')\n"
"x = spam\n"
"y = eggs"
msgstr ""
">>> try:\n"
"... raise Exception('spam', 'eggs')\n"
"... except Exception as inst:\n"
"... print(type(inst)) # der Exception-Typ\n"
"... print(inst.args) # in .args gespeicherte Argumentes\n"
"... print(inst) # __str__ erlaubt die direkte Ausgabe von "
"args,\n"
"... # kann aber in Exception-Unterklassen "
"überschrieben werden\n"
"... x, y = inst.args # args entpacken\n"
"... print('x =', x)\n"
"... print('y =', y)\n"
"...\n"
"\n"
"('spam', 'eggs')\n"
"('spam', 'eggs')\n"
"x = spam\n"
"y = eggs"
#: ../../tutorial/errors.rst:183
msgid ""
"The exception's :meth:`~object.__str__` output is printed as the last part "
"('detail') of the message for unhandled exceptions."
msgstr ""
"Bei unbehandelten Ausnahmen wird die :meth:`~object.__str__` Ausgabe der "
"Ausnahme als letzter Teil (\"Detail\") der Meldung ausgegeben."
#: ../../tutorial/errors.rst:186
msgid ""
":exc:`BaseException` is the common base class of all exceptions. One of its "
"subclasses, :exc:`Exception`, is the base class of all the non-fatal "
"exceptions. Exceptions which are not subclasses of :exc:`Exception` are not "
"typically handled, because they are used to indicate that the program should "
"terminate. They include :exc:`SystemExit` which is raised by :meth:`sys."
"exit` and :exc:`KeyboardInterrupt` which is raised when a user wishes to "
"interrupt the program."
msgstr ""
":exc:`BaseException` ist die gemeinsame Basisklasse für alle Ausnahmen. Eine "
"ihrer Unterklassen, :exc:`Exception`, ist die Basisklasse für alle nicht "
"schwerwiegenden Ausnahmen. Ausnahmen, die keine Unterklassen von :exc:"
"`Exception` sind, werden in der Regel nicht behandelt, da sie dazu dienen, "
"anzuzeigen, dass das Programm beendet werden soll. Dazu gehören :exc:"
"`SystemExit`, die von :meth:`sys.exit` ausgelöst wird, und :exc:"
"`KeyboardInterrupt`, die ausgelöst wird, wenn ein Benutzer das Programm "
"unterbrechen möchte."
#: ../../tutorial/errors.rst:194
msgid ""
":exc:`Exception` can be used as a wildcard that catches (almost) everything. "
"However, it is good practice to be as specific as possible with the types of "
"exceptions that we intend to handle, and to allow any unexpected exceptions "
"to propagate on."
msgstr ""
":exc:`Exception` kann als Platzhalter verwendet werden, der (fast) alles "
"abfängt. Es empfiehlt sich jedoch, die Arten von Ausnahmen, die behandelt "
"werden sollen, so genau wie möglich festzulegen und zuzulassen, dass "
"unerwartete Ausnahmen weitergegeben werden."
#: ../../tutorial/errors.rst:199
msgid ""
"The most common pattern for handling :exc:`Exception` is to print or log the "
"exception and then re-raise it (allowing a caller to handle the exception as "
"well)::"
msgstr ""
"Das gängigste Muster für die :exc:`Exception` Behandlung ist, die Ausnahme "
"auszugeben oder zu protokollieren und sie dann erneut auszulösen (damit ein "
"Aufrufer die Ausnahme ebenfalls behandeln kann)::"
#: ../../tutorial/errors.rst:203
msgid ""
"import sys\n"
"\n"
"try:\n"
" f = open('myfile.txt')\n"
" s = f.readline()\n"
" i = int(s.strip())\n"
"except OSError as err:\n"
" print(\"OS error:\", err)\n"
"except ValueError:\n"
" print(\"Could not convert data to an integer.\")\n"
"except Exception as err:\n"
" print(f\"Unexpected {err=}, {type(err)=}\")\n"
" raise"
msgstr ""
"import sys\n"
"\n"
"try:\n"
" f = open('myfile.txt')\n"
" s = f.readline()\n"
" i = int(s.strip())\n"
"except OSError as err:\n"
" print(\"OS error:\", err)\n"
"except ValueError:\n"
" print(\"Could not convert data to an integer.\")\n"
"except Exception as err:\n"
" print(f\"Unexpected {err=}, {type(err)=}\")\n"
" raise"
#: ../../tutorial/errors.rst:217
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 ""
"Die :keyword:`try` ... :keyword:`except` Anweisung hat eine optionale *Else-"
"Klausel*, die, wenn vorhanden, allen *Except-Klauseln* folgen muss. Sie ist "
"nützlich für Code, der ausgeführt werden muss, wenn die *Try-Klausel* keine "
"Ausnahme auslöst. Zum Beispiel::"
#: ../../tutorial/errors.rst:222
msgid ""
"for arg in sys.argv[1:]:\n"
" try:\n"
" f = open(arg, 'r')\n"
" except OSError:\n"
" print('cannot open', arg)\n"
" else:\n"
" print(arg, 'has', len(f.readlines()), 'lines')\n"
" f.close()"
msgstr ""
"for arg in sys.argv[1:]:\n"
" try:\n"
" f = open(arg, 'r')\n"
" except OSError:\n"
" print('kann nicht geöffnet werden', arg)\n"
" else:\n"
" print(arg, 'hat', len(f.readlines()), 'Zeilen')\n"
" f.close()"
#: ../../tutorial/errors.rst:231
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 ""
"Die Verwendung der :keyword:`!else` Klausel ist besser als das Hinzufügen "
"von zusätzlichem Code zu der :keyword:`try` Klausel, weil dadurch vermieden "
"wird, dass versehentlich eine Ausnahme abgefangen wird, die nicht durch den "
"Code ausgelöst wurde, der durch die :keyword:`!try` ... :keyword:`!except` "
"Anweisung geschützt wird."
#: ../../tutorial/errors.rst:236
msgid ""
"Exception handlers do not handle only exceptions that occur immediately in "
"the *try clause*, but also those that occur inside functions that are called "
"(even indirectly) in the *try clause*. For example::"
msgstr ""
"Ausnahmehandler behandeln nicht nur Ausnahmen, die unmittelbar in der *Try-"
"Klausel* auftreten, sondern auch solche, die innerhalb von Funktionen "
"auftreten, die (auch indirekt) in der *Try-Klausel* aufgerufen werden. Zum "
"Beispiel::"
#: ../../tutorial/errors.rst:240
msgid ""
">>> def this_fails():\n"
"... x = 1/0\n"
"...\n"
">>> try:\n"
"... this_fails()\n"
"... except ZeroDivisionError as err:\n"
"... print('Handling run-time error:', err)\n"
"...\n"
"Handling run-time error: division by zero"
msgstr ""
">>> def this_fails():\n"
"... x = 1/0\n"
"...\n"
">>> try:\n"
"... this_fails()\n"
"... except ZeroDivisionError as err:\n"
"... print('Handling run-time error:', err)\n"
"...\n"
"Handling run-time error: division by zero"
#: ../../tutorial/errors.rst:254
msgid "Raising Exceptions"
msgstr "Auslösen von Ausnahmen"
#: ../../tutorial/errors.rst:256
msgid ""
"The :keyword:`raise` statement allows the programmer to force a specified "
"exception to occur. For example::"
msgstr ""
"Die :keyword:`raise` Anweisung ermöglicht es dem Programmierer, das "
"Auftreten einer bestimmten Ausnahme zu erzwingen. Zum Beispiel::"
#: ../../tutorial/errors.rst:259
msgid ""
">>> raise NameError('HiThere')\n"
"Traceback (most recent call last):\n"
" File \"\", line 1, in \n"
" raise NameError('HiThere')\n"
"NameError: HiThere"
msgstr ""
">>> raise NameError('HiThere')\n"
"Traceback (most recent call last):\n"
" File \"\", line 1, in \n"
" raise NameError('HiThere')\n"
"NameError: HiThere"
#: ../../tutorial/errors.rst:265
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:`BaseException`, such as :exc:`Exception` or one of "
"its subclasses). If an exception class is passed, it will be implicitly "
"instantiated by calling its constructor with no arguments::"
msgstr ""
"Das reine :keyword:`raise` Argument gibt die Ausnahme an, die ausgelöst "
"werden soll. Dabei muss es sich entweder um eine Ausnahme-Instanz oder eine "
"Ausnahmen-Klasse handeln (Eine Klasse, die von einer :class:`BaseException`, "
"wie :exc:`Exception` oder einer ihrer Unterklassen abgeleitet ist). Wenn "
"eine Ausnahmeklasse übergeben wird, wird sie implizit instanziiert, indem "
"ihr Konstruktor ohne Argumente aufgerufen wird::"
#: ../../tutorial/errors.rst:271
msgid "raise ValueError # shorthand for 'raise ValueError()'"
msgstr "raise ValueError # Kurzform für 'raise ValueError()'"
#: ../../tutorial/errors.rst:273
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 ""
"Wenn du feststellen musst, ob eine Ausnahme ausgelöst wurde, aber nicht "
"beabsichtigst, diese zu behandeln, kannst du mit einer einfacheren Form der :"
"keyword:`raise` Anweisung die Ausnahme erneut auslösen::"
#: ../../tutorial/errors.rst:277
msgid ""
">>> try:\n"
"... raise NameError('HiThere')\n"
"... except NameError:\n"
"... print('An exception flew by!')\n"
"... raise\n"
"...\n"
"An exception flew by!\n"
"Traceback (most recent call last):\n"
" File \"\", line 2, in \n"
" raise NameError('HiThere')\n"
"NameError: HiThere"
msgstr ""
">>> try:\n"
"... raise NameError('HiThere')\n"
"... except NameError:\n"
"... print('An exception flew by!')\n"
"... raise\n"
"...\n"
"An exception flew by!\n"
"Traceback (most recent call last):\n"
" File \"\", line 2, in \n"
" raise NameError('HiThere')\n"
"NameError: HiThere"
#: ../../tutorial/errors.rst:293
msgid "Exception Chaining"
msgstr "Verkettung von Ausnahmen"
#: ../../tutorial/errors.rst:295
msgid ""
"If an unhandled exception occurs inside an :keyword:`except` section, it "
"will have the exception being handled attached to it and included in the "
"error message::"
msgstr ""
"Tritt eine unbehandelte Ausnahme innerhalb eines :keyword:`except` "
"Abschnitts auf, wird die behandelte Ausnahme an diesen Abschnitt angehängt "
"und in die Fehlermeldung aufgenommen::"
#: ../../tutorial/errors.rst:299
msgid ""
">>> try:\n"
"... open(\"database.sqlite\")\n"
"... except OSError:\n"
"... raise RuntimeError(\"unable to handle error\")\n"
"...\n"
"Traceback (most recent call last):\n"
" File \"\", line 2, in \n"
" open(\"database.sqlite\")\n"
" ~~~~^^^^^^^^^^^^^^^^^^^\n"
"FileNotFoundError: [Errno 2] No such file or directory: 'database.sqlite'\n"
"\n"
"During handling of the above exception, another exception occurred:\n"
"\n"
"Traceback (most recent call last):\n"
" File \"\", line 4, in \n"
" raise RuntimeError(\"unable to handle error\")\n"
"RuntimeError: unable to handle error"
msgstr ""
">>> try:\n"
"... open(\"database.sqlite\")\n"
"... except OSError:\n"
"... raise RuntimeError(\"unable to handle error\")\n"
"...\n"
"Traceback (most recent call last):\n"
" File \"\", line 2, in \n"
" open(\"database.sqlite\")\n"
" ~~~~^^^^^^^^^^^^^^^^^^^\n"
"FileNotFoundError: [Errno 2] No such file or directory: 'database.sqlite'\n"
"\n"
"During handling of the above exception, another exception occurred:\n"
"\n"
"Traceback (most recent call last):\n"
" File \"\", line 4, in \n"
" raise RuntimeError(\"unable to handle error\")\n"
"RuntimeError: unable to handle error"
#: ../../tutorial/errors.rst:317
msgid ""
"To indicate that an exception is a direct consequence of another, the :"
"keyword:`raise` statement allows an optional :keyword:`from` clause::"
msgstr ""
"Um anzuzeigen, dass eine Ausnahme eine direkte Folge einer anderen ist, "
"erlaubt die :keyword:`raise` Anweisung eine optionale :keyword:`from` "
"Klausel::"
#: ../../tutorial/errors.rst:320
msgid ""
"# exc must be exception instance or None.\n"
"raise RuntimeError from exc"
msgstr ""
"# exc muss eine Ausnahminstanz oder None sein.\n"
"raise RuntimeError from exc"
#: ../../tutorial/errors.rst:323
msgid "This can be useful when you are transforming exceptions. For example::"
msgstr ""
"Dies kann nützlich sein, wenn du Ausnahmen umwandeln wikkst. Zum Beispiel::"
#: ../../tutorial/errors.rst:325
msgid ""
">>> def func():\n"
"... raise ConnectionError\n"
"...\n"
">>> try:\n"
"... func()\n"
"... except ConnectionError as exc:\n"
"... raise RuntimeError('Failed to open database') from exc\n"
"...\n"
"Traceback (most recent call last):\n"
" File \"\", line 2, in \n"
" func()\n"
" ~~~~^^\n"
" File \"\", line 2, in func\n"
"ConnectionError\n"
"\n"
"The above exception was the direct cause of the following exception:\n"
"\n"
"Traceback (most recent call last):\n"
" File \"\", line 4, in \n"
" raise RuntimeError('Failed to open database') from exc\n"
"RuntimeError: Failed to open database"
msgstr ""
">>> def func():\n"
"... raise ConnectionError\n"
"...\n"
">>> try:\n"
"... func()\n"
"... except ConnectionError as exc:\n"
"... raise RuntimeError('Failed to open database') from exc\n"
"...\n"
"Traceback (most recent call last):\n"
" File \"\", line 2, in \n"
" func()\n"
" ~~~~^^\n"
" File \"\", line 2, in func\n"
"ConnectionError\n"
"\n"
"The above exception was the direct cause of the following exception:\n"
"\n"
"Traceback (most recent call last):\n"
" File \"\", line 4, in \n"
" raise RuntimeError('Failed to open database') from exc\n"
"RuntimeError: Failed to open database"
#: ../../tutorial/errors.rst:347
msgid ""
"It also allows disabling automatic exception chaining using the ``from "
"None`` idiom::"
msgstr ""
"Es erlaubt auch die Deaktivierung der automatischen Ausnahmeverkettung mit "
"dem ``from None`` Idiom::"
#: ../../tutorial/errors.rst:350
msgid ""
">>> try:\n"
"... open('database.sqlite')\n"
"... except OSError:\n"
"... raise RuntimeError from None\n"
"...\n"
"Traceback (most recent call last):\n"
" File \"\", line 4, in \n"
" raise RuntimeError from None\n"
"RuntimeError"
msgstr ""
">>> try:\n"
"... open('database.sqlite')\n"
"... except OSError:\n"
"... raise RuntimeError from None\n"
"...\n"
"Traceback (most recent call last):\n"
" File \"\", line 4, in \n"
" raise RuntimeError from None\n"
"RuntimeError"
#: ../../tutorial/errors.rst:360
msgid ""
"For more information about chaining mechanics, see :ref:`bltin-exceptions`."
msgstr ""
"Weitere Informationen zur Verkettungsmechanik findest du unter :ref:`bltin-"
"exceptions`."
#: ../../tutorial/errors.rst:366
msgid "User-defined Exceptions"
msgstr "Benutzerdefinierte Ausnahmen"
#: ../../tutorial/errors.rst:368
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 ""
"Programme können ihre eigenen Ausnahmen benennen, indem sie eine neue "
"Ausnahmeklasse erstellen (siehe :ref:`tut-classes` für mehr über Python-"
"Klassen). Ausnahmen sollten in der Regel von der :exc:`Exception` Klasse "
"abgeleitet werden, entweder direkt oder indirekt."
#: ../../tutorial/errors.rst:372
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."
msgstr ""
"Es können Ausnahmeklassen definiert werden, die alles tun können, was jede "
"andere Klasse auch tun kann, aber sie sind in der Regel einfach gehalten und "
"bieten oft nur eine Reihe von Attributen, die es ermöglichen, Informationen "
"über den Fehler durch Handler für die Ausnahme zu extrahieren."
#: ../../tutorial/errors.rst:376
msgid ""
"Most exceptions are defined with names that end in \"Error\", similar to the "
"naming of the standard exceptions."
msgstr ""
"Die meisten Ausnahmen werden mit Namen definiert, die auf \"Error\" enden, "
"ähnlich der Benennung der Standardausnahmen."
#: ../../tutorial/errors.rst:379
msgid ""
"Many standard modules define their own exceptions to report errors that may "
"occur in functions they define."
msgstr ""
"Viele Standardmodule definieren ihre eigenen Ausnahmen, um Fehler zu melden, "
"die in den von ihnen definierten Funktionen auftreten können."
#: ../../tutorial/errors.rst:386
msgid "Defining Clean-up Actions"
msgstr "Definition von Bereinigungsaktionen"
#: ../../tutorial/errors.rst:388
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 ""
"Die :keyword:`try` Anweisung enthält eine weitere optionale Klausel, die "
"dazu dient, Bereinigungsaktionen zu definieren, die unter allen Umständen "
"ausgeführt werden müssen. Zum Beispiel::"
#: ../../tutorial/errors.rst:392
msgid ""
">>> try:\n"
"... raise KeyboardInterrupt\n"
"... finally:\n"
"... print('Goodbye, world!')\n"
"...\n"
"Goodbye, world!\n"
"Traceback (most recent call last):\n"
" File \"\", line 2, in \n"
" raise KeyboardInterrupt\n"
"KeyboardInterrupt"
msgstr ""
">>> try:\n"
"... raise KeyboardInterrupt\n"
"... finally:\n"
"... print('Goodbye, world!')\n"
"...\n"
"Goodbye, world!\n"
"Traceback (most recent call last):\n"
" File \"\", line 2, in \n"
" raise KeyboardInterrupt\n"
"KeyboardInterrupt"
#: ../../tutorial/errors.rst:403
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 ""
"Wenn eine :keyword:`finally` Klausel vorhanden ist, wird die :keyword:`!"
"finally` Klausel als letzte Aufgabe ausgeführt, bevor die :keyword:`try` "
"Anweisung abgeschlossen wird. Die :keyword:`!finally` Klausel wird "
"unabhängig davon ausgeführt, ob die :keyword:`!try` Anweisung eine Ausnahme "
"erzeugt oder nicht. In den folgenden Punkten werden komplexere Fälle beim "
"Auftreten einer Ausnahme behandelt:"
#: ../../tutorial/errors.rst:409
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 ""
"Wenn während der Ausführung der :keyword:`!try` Klausel eine Ausnahme "
"auftritt, kann die Ausnahme von einer :keyword:`except` Klausel behandelt "
"werden. Wenn die Ausnahme nicht durch eine :keyword:`!except` Klausel "
"behandelt wird, wird die Ausnahme erneut ausgelöst, nachdem die :keyword:`!"
"finally` Klausel ausgeführt wurde."
#: ../../tutorial/errors.rst:415
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 ""
"Während der Ausführung einer :keyword:`!except` oder :keyword:`!else` "
"Klausel kann eine Ausnahme auftreten. Auch hier wird die Ausnahme erneut "
"ausgelöst, nachdem die :keyword:`!finally` Klausel ausgeführt wurde."
#: ../../tutorial/errors.rst:419
msgid ""
"If the :keyword:`!finally` clause executes a :keyword:`break`, :keyword:"
"`continue` or :keyword:`return` statement, exceptions are not re-raised. "
"This can be confusing and is therefore discouraged. From version 3.14 the "
"compiler emits a :exc:`SyntaxWarning` for it (see :pep:`765`)."
msgstr ""
"Wenn die Klausel :keyword:`!finally` eine Anweisung vom Typ :keyword:"
"`break`, :keyword:`continue` oder :keyword:`return` ausführt, werden "
"Ausnahmen nicht erneut ausgelöst. Dies kann verwirrend sein und wird daher "
"nicht empfohlen. Ab Version 3.14 gibt der Compiler hierfür die "
"Fehlermeldung :exc:`SyntaxWarning` aus (siehe :pep:`765`)."
#: ../../tutorial/errors.rst:425
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 ""
"Wenn die :keyword:`!try` Anweisung eine :keyword:`break`, :keyword:"
"`continue` oder :keyword:`return` Anweisung erreicht, wird die :keyword:`!"
"finally` Klausel direkt vor der Ausführung der :keyword:`!break`, :keyword:`!"
"continue` oder :keyword:`!return` Anweisung ausgeführt."
#: ../../tutorial/errors.rst:431
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. This can be confusing and is "
"therefore discouraged. From version 3.14 the compiler emits a :exc:"
"`SyntaxWarning` for it (see :pep:`765`)."
msgstr ""
"Wenn eine :keyword:`!finally`-Klausel eine :keyword:`!return`-Anweisung "
"enthält, ist der zurückgegebene Wert derjenige aus der :keyword:`!return`-"
"Anweisung der :keyword:`!finally`-Klausel und nicht der Wert aus der :"
"keyword:`!return`-Anweisung der :keyword:`!try`-Klausel. Dies kann "
"verwirrend sein und wird daher nicht empfohlen. Ab Version 3.14 gibt der "
"Compiler hierfür eine :exc:`SyntaxWarning`-Meldung aus (siehe :pep:`765`)."
#: ../../tutorial/errors.rst:439
msgid "For example::"
msgstr "Zum Beispiel::"
#: ../../tutorial/errors.rst:441
msgid ""
">>> def bool_return():\n"
"... try:\n"
"... return True\n"
"... finally:\n"
"... return False\n"
"...\n"
">>> bool_return()\n"
"False"
msgstr ""
">>> def bool_return():\n"
"... try:\n"
"... return True\n"
"... finally:\n"
"... return False\n"
"...\n"
">>> bool_return()\n"
"False"
#: ../../tutorial/errors.rst:450
msgid "A more complicated example::"
msgstr "Ein komplizierteres Beispiel::"
#: ../../tutorial/errors.rst:452
msgid ""
">>> def divide(x, y):\n"
"... try:\n"
"... result = x / y\n"
"... except ZeroDivisionError:\n"
"... print(\"division by zero!\")\n"
"... else:\n"
"... print(\"result is\", result)\n"
"... finally:\n"
"... print(\"executing finally clause\")\n"
"...\n"
">>> divide(2, 1)\n"
"result is 2.0\n"
"executing finally clause\n"
">>> divide(2, 0)\n"
"division by zero!\n"
"executing finally clause\n"
">>> divide(\"2\", \"1\")\n"
"executing finally clause\n"
"Traceback (most recent call last):\n"
" File \"\", line 1, in \n"
" divide(\"2\", \"1\")\n"
" ~~~~~~^^^^^^^^^^\n"
" File \"\", line 3, in divide\n"
" result = x / y\n"
" ~~^~~\n"
"TypeError: unsupported operand type(s) for /: 'str' and 'str'"
msgstr ""
">>> def divide(x, y):\n"
"... try:\n"
"... result = x / y\n"
"... except ZeroDivisionError:\n"
"... print(\"division by zero!\")\n"
"... else:\n"
"... print(\"result is\", result)\n"
"... finally:\n"
"... print(\"executing finally clause\")\n"
"...\n"
">>> divide(2, 1)\n"
"result is 2.0\n"
"executing finally clause\n"
">>> divide(2, 0)\n"
"division by zero!\n"
"executing finally clause\n"
">>> divide(\"2\", \"1\")\n"
"executing finally clause\n"
"Traceback (most recent call last):\n"
" File \"\", line 1, in \n"
" divide(\"2\", \"1\")\n"
" ~~~~~~^^^^^^^^^^\n"
" File \"\", line 3, in divide\n"
" result = x / y\n"
" ~~^~~\n"
"TypeError: unsupported operand type(s) for /: 'str' and 'str'"
#: ../../tutorial/errors.rst:479
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 ""
"Wie du sehen kannst, wird die :keyword:`finally` Klausel in jedem Fall "
"ausgeführt. Der :exc:`TypeError`, ausgelöst durch die Teilung zweier "
"Zeichenfolgenn wird von der :keyword:`except` Klausel nicht verarbeitet und "
"daher nach Ausführung der :keyword:`!finally` Klausel erneut ausgelöst."
#: ../../tutorial/errors.rst:484
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 ""
"In realen Anwendungen ist die :keyword:`finally` Klausel nützlich, um "
"externe Ressourcen (z. B. Dateien oder Netzwerkverbindungen) freizugeben, "
"unabhängig davon, ob die Nutzung der Ressource erfolgreich war."
#: ../../tutorial/errors.rst:492
msgid "Predefined Clean-up Actions"
msgstr "Vordefinierte Bereinigungsaktionen"
#: ../../tutorial/errors.rst:494
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 ""
"Einige Objekte definieren Standardbereinigungsaktionen, die durchgeführt "
"werden, wenn das Objekt nicht mehr benötigt wird, unabhängig davon, ob der "
"Vorgang mit dem Objekt erfolgreich war oder fehlgeschlagen ist. Schau dir "
"das folgende Beispiel an, in dem versucht wird, eine Datei zu öffnen und "
"ihren Inhalt auf dem Bildschirm auszugeben. ::"
#: ../../tutorial/errors.rst:499
msgid ""
"for line in open(\"myfile.txt\"):\n"
" print(line, end=\"\")"
msgstr ""
"for line in open(\"myfile.txt\"):\n"
" print(line, end=\"\")"
#: ../../tutorial/errors.rst:502
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 ""
"Das Problem bei diesem Code besteht darin, dass die Datei für eine "
"unbestimmte Zeit geöffnet bleibt, nachdem die Ausführung dieses Teils des "
"Codes abgeschlossen ist. Dies ist bei einfachen Skripten kein Problem, kann "
"jedoch bei gröÃeren Anwendungen ein Problem darstellen. Die :keyword:`with` "
"Anweisung ermöglicht die Verwendung von Objekten wie Dateien auf eine Weise, "
"die sicherstellt, dass sie stets zeitnah und korrekt bereinigt werden. ::"
#: ../../tutorial/errors.rst:508
msgid ""
"with open(\"myfile.txt\") as f:\n"
" for line in f:\n"
" print(line, end=\"\")"
msgstr ""
"with open(\"myfile.txt\") as f:\n"
" for line in f:\n"
" print(line, end=\"\")"
#: ../../tutorial/errors.rst:512
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 ""
"Nach Ausführung der Anweisung wird die Datei *f* immer geschlossen, auch "
"wenn bei der Verarbeitung der Zeilen ein Problem aufgetreten ist. Objekte, "
"die wie Dateien vordefinierte Bereinigungsaktionen bereitstellen, weisen in "
"ihrer Dokumentation darauf hin."
#: ../../tutorial/errors.rst:520
msgid "Raising and Handling Multiple Unrelated Exceptions"
msgstr "Auslösen und Behandeln mehrerer unzusammenhängender Ausnahmen"
#: ../../tutorial/errors.rst:522
msgid ""
"There are situations where it is necessary to report several exceptions that "
"have occurred. This is often the case in concurrency frameworks, when "
"several tasks may have failed in parallel, but there are also other use "
"cases where it is desirable to continue execution and collect multiple "
"errors rather than raise the first exception."
msgstr ""
"Es gibt Situationen, in denen es notwendig ist, mehrere aufgetretene "
"Ausnahmen zu melden. Dies ist häufig in Parallelitäts-Frameworks der Fall, "
"wenn möglicherweise mehrere Aufgaben parallel fehlgeschlagen sind. Es gibt "
"jedoch auch andere Anwendungsfälle, in denen es wünschenswert ist, die "
"Ausführung fortzusetzen und mehrere Fehler zu sammeln, anstatt die erste "
"Ausnahme auszulösen."
#: ../../tutorial/errors.rst:528
msgid ""
"The builtin :exc:`ExceptionGroup` wraps a list of exception instances so "
"that they can be raised together. It is an exception itself, so it can be "
"caught like any other exception. ::"
msgstr ""
"Die integrierte :exc:`ExceptionGroup` Funktion umschlieÃt eine Liste von "
"Ausnahmeinstanzen, sodass diese gemeinsam ausgelöst werden können. Da es "
"sich selbst um eine Ausnahme handelt, kann sie wie jede andere Ausnahme "
"abgefangen werden. ::"
#: ../../tutorial/errors.rst:532
msgid ""
">>> def f():\n"
"... excs = [OSError('error 1'), SystemError('error 2')]\n"
"... raise ExceptionGroup('there were problems', excs)\n"
"...\n"
">>> f()\n"
" + Exception Group Traceback (most recent call last):\n"
" | File \"\", line 1, in \n"
" | f()\n"
" | ~^^\n"
" | File \"\", line 3, in f\n"
" | raise ExceptionGroup('there were problems', excs)\n"
" | ExceptionGroup: there were problems (2 sub-exceptions)\n"
" +-+---------------- 1 ----------------\n"
" | OSError: error 1\n"
" +---------------- 2 ----------------\n"
" | SystemError: error 2\n"
" +------------------------------------\n"
">>> try:\n"
"... f()\n"
"... except Exception as e:\n"
"... print(f'caught {type(e)}: {e}')\n"
"...\n"
"caught : there were problems (2 sub-exceptions)\n"
">>>"
msgstr ""
">>> def f():\n"
"... excs = [OSError('error 1'), SystemError('error 2')]\n"
"... raise ExceptionGroup('there were problems', excs)\n"
"...\n"
">>> f()\n"
" + Exception Group Traceback (most recent call last):\n"
" | File \"\", line 1, in \n"
" | f()\n"
" | ~^^\n"
" | File \"\", line 3, in f\n"
" | raise ExceptionGroup('there were problems', excs)\n"
" | ExceptionGroup: there were problems (2 sub-exceptions)\n"
" +-+---------------- 1 ----------------\n"
" | OSError: error 1\n"
" +---------------- 2 ----------------\n"
" | SystemError: error 2\n"
" +------------------------------------\n"
">>> try:\n"
"... f()\n"
"... except Exception as e:\n"
"... print(f'caught {type(e)}: {e}')\n"
"...\n"
"caught : there were problems (2 sub-exceptions)\n"
">>>"
#: ../../tutorial/errors.rst:557
msgid ""
"By using ``except*`` instead of ``except``, we can selectively handle only "
"the exceptions in the group that match a certain type. In the following "
"example, which shows a nested exception group, each ``except*`` clause "
"extracts from the group exceptions of a certain type while letting all other "
"exceptions propagate to other clauses and eventually to be reraised. ::"
msgstr ""
"Durch das Nutzen von ``except*`` anstelle von ``except``, können wir "
"selektiv nur die Ausnahmen in der Gruppe behandeln, die einen bestimmten Typ "
"entsprechen. Im folgenden Beispiel, das eine verschachtelte Ausnahmegruppe "
"zeigt, extrahiert jede ``except*`` Klausel Ausnahmen eines bestimmten Typs "
"aus der Gruppe, während alle anderen Ausnahmen an andere Klauseln "
"weitergegeben und schlieÃlich erneut ausgelöst werden. ::"
#: ../../tutorial/errors.rst:564
msgid ""
">>> def f():\n"
"... raise ExceptionGroup(\n"
"... \"group1\",\n"
"... [\n"
"... OSError(1),\n"
"... SystemError(2),\n"
"... ExceptionGroup(\n"
"... \"group2\",\n"
"... [\n"
"... OSError(3),\n"
"... RecursionError(4)\n"
"... ]\n"
"... )\n"
"... ]\n"
"... )\n"
"...\n"
">>> try:\n"
"... f()\n"
"... except* OSError as e:\n"
"... print(\"There were OSErrors\")\n"
"... except* SystemError as e:\n"
"... print(\"There were SystemErrors\")\n"
"...\n"
"There were OSErrors\n"
"There were SystemErrors\n"
" + Exception Group Traceback (most recent call last):\n"
" | File \"\", line 2, in \n"
" | f()\n"
" | ~^^\n"
" | File \"\", line 2, in f\n"
" | raise ExceptionGroup(\n"
" | ...<12 lines>...\n"
" | )\n"
" | ExceptionGroup: group1 (1 sub-exception)\n"
" +-+---------------- 1 ----------------\n"
" | ExceptionGroup: group2 (1 sub-exception)\n"
" +-+---------------- 1 ----------------\n"
" | RecursionError: 4\n"
" +------------------------------------\n"
">>>"
msgstr ""
">>> def f():\n"
"... raise ExceptionGroup(\n"
"... \"group1\",\n"
"... [\n"
"... OSError(1),\n"
"... SystemError(2),\n"
"... ExceptionGroup(\n"
"... \"group2\",\n"
"... [\n"
"... OSError(3),\n"
"... RecursionError(4)\n"
"... ]\n"
"... )\n"
"... ]\n"
"... )\n"
"...\n"
">>> try:\n"
"... f()\n"
"... except* OSError as e:\n"
"... print(\"There were OSErrors\")\n"
"... except* SystemError as e:\n"
"... print(\"There were SystemErrors\")\n"
"...\n"
"There were OSErrors\n"
"There were SystemErrors\n"
" + Exception Group Traceback (most recent call last):\n"
" | File \"\", line 2, in \n"
" | f()\n"
" | ~^^\n"
" | File \"\", line 2, in f\n"
" | raise ExceptionGroup(\n"
" | ...<12 lines>...\n"
" | )\n"
" | ExceptionGroup: group1 (1 sub-exception)\n"
" +-+---------------- 1 ----------------\n"
" | ExceptionGroup: group2 (1 sub-exception)\n"
" +-+---------------- 1 ----------------\n"
" | RecursionError: 4\n"
" +------------------------------------\n"
">>>"
#: ../../tutorial/errors.rst:605
msgid ""
"Note that the exceptions nested in an exception group must be instances, not "
"types. This is because in practice the exceptions would typically be ones "
"that have already been raised and caught by the program, along the following "
"pattern::"
msgstr ""
"Beachte, dass die in einer Ausnahmegruppe verschachtelten Ausnahmen "
"Instanzen und keine Typen sein müssen. Dies liegt daran, dass es sich in der "
"Praxis typischerweise um Ausnahmen handelt, die bereits vom Programm "
"ausgelöst und abgefangen wurden, und zwar nach dem folgenden Muster:"
#: ../../tutorial/errors.rst:610
msgid ""
">>> excs = []\n"
"... for test in tests:\n"
"... try:\n"
"... test.run()\n"
"... except Exception as e:\n"
"... excs.append(e)\n"
"...\n"
">>> if excs:\n"
"... raise ExceptionGroup(\"Test Failures\", excs)\n"
"..."
msgstr ""
">>> excs = []\n"
"... for test in tests:\n"
"... try:\n"
"... test.run()\n"
"... except Exception as e:\n"
"... excs.append(e)\n"
"...\n"
">>> if excs:\n"
"... raise ExceptionGroup(\"Test Failures\", excs)\n"
"..."
#: ../../tutorial/errors.rst:625
msgid "Enriching Exceptions with Notes"
msgstr "Anreicherung von Ausnahmen mit Notizen"
#: ../../tutorial/errors.rst:627
msgid ""
"When an exception is created in order to be raised, it is usually "
"initialized with information that describes the error that has occurred. "
"There are cases where it is useful to add information after the exception "
"was caught. For this purpose, exceptions have a method ``add_note(note)`` "
"that accepts a string and adds it to the exception's notes list. The "
"standard traceback rendering includes all notes, in the order they were "
"added, after the exception. ::"
msgstr ""
"Wenn eine Ausnahme erstellt wird, um ausgelöst zu werden, wird sie "
"normalerweise mit Informationen initialisiert, die den aufgetretenen Fehler "
"beschreiben. Es gibt Fälle, in denen es sinnvoll ist, Informationen "
"hinzuzufügen, nachdem die Ausnahme abgefangen wurde. Zu diesem Zweck "
"verfügen Ausnahmen über eine Methode ``add_note(note)``, welche einen String "
"akzeptiert und zur Notizenliste der Ausnahme hinzufügt. Das Standard-"
"Traceback-Rendering umfasst alle Notizen in der Reihenfolge, in der sie nach "
"der Ausnahme hinzugefügt wurden. ::"
#: ../../tutorial/errors.rst:634
msgid ""
">>> try:\n"
"... raise TypeError('bad type')\n"
"... except Exception as e:\n"
"... e.add_note('Add some information')\n"
"... e.add_note('Add some more information')\n"
"... raise\n"
"...\n"
"Traceback (most recent call last):\n"
" File \"\", line 2, in \n"
" raise TypeError('bad type')\n"
"TypeError: bad type\n"
"Add some information\n"
"Add some more information\n"
">>>"
msgstr ""
">>> try:\n"
"... raise TypeError('bad type')\n"
"... except Exception as e:\n"
"... e.add_note('Add some information')\n"
"... e.add_note('Add some more information')\n"
"... raise\n"
"...\n"
"Traceback (most recent call last):\n"
" File \"\", line 2, in \n"
" raise TypeError('bad type')\n"
"TypeError: bad type\n"
"Add some information\n"
"Add some more information\n"
">>>"
#: ../../tutorial/errors.rst:649
msgid ""
"For example, when collecting exceptions into an exception group, we may want "
"to add context information for the individual errors. In the following each "
"exception in the group has a note indicating when this error has occurred. ::"
msgstr ""
"Wenn wir beispielsweise Ausnahmen in einer Ausnahmegruppe sammeln, möchten "
"wir möglicherweise Kontextinformationen für die einzelnen Fehler hinzufügen. "
"Im Folgenden gibt es für jede Ausnahme in der Gruppe einen Hinweis, der "
"angibt, wann dieser Fehler aufgetreten ist. ::"
#: ../../tutorial/errors.rst:653
msgid ""
">>> def f():\n"
"... raise OSError('operation failed')\n"
"...\n"
">>> excs = []\n"
">>> for i in range(3):\n"
"... try:\n"
"... f()\n"
"... except Exception as e:\n"
"... e.add_note(f'Happened in Iteration {i+1}')\n"
"... excs.append(e)\n"
"...\n"
">>> raise ExceptionGroup('We have some problems', excs)\n"
" + Exception Group Traceback (most recent call last):\n"
" | File \"\", line 1, in \n"
" | raise ExceptionGroup('We have some problems', excs)\n"
" | ExceptionGroup: We have some problems (3 sub-exceptions)\n"
" +-+---------------- 1 ----------------\n"
" | Traceback (most recent call last):\n"
" | File \"\", line 3, in \n"
" | f()\n"
" | ~^^\n"
" | File \"\", line 2, in f\n"
" | raise OSError('operation failed')\n"
" | OSError: operation failed\n"
" | Happened in Iteration 1\n"
" +---------------- 2 ----------------\n"
" | Traceback (most recent call last):\n"
" | File \"\", line 3, in \n"
" | f()\n"
" | ~^^\n"
" | File \"\", line 2, in f\n"
" | raise OSError('operation failed')\n"
" | OSError: operation failed\n"
" | Happened in Iteration 2\n"
" +---------------- 3 ----------------\n"
" | Traceback (most recent call last):\n"
" | File \"\", line 3, in \n"
" | f()\n"
" | ~^^\n"
" | File \"\", line 2, in f\n"
" | raise OSError('operation failed')\n"
" | OSError: operation failed\n"
" | Happened in Iteration 3\n"
" +------------------------------------\n"
">>>"
msgstr ""
">>> def f():\n"
"... raise OSError('operation failed')\n"
"...\n"
">>> excs = []\n"
">>> for i in range(3):\n"
"... try:\n"
"... f()\n"
"... except Exception as e:\n"
"... e.add_note(f'Happened in Iteration {i+1}')\n"
"... excs.append(e)\n"
"...\n"
">>> raise ExceptionGroup('We have some problems', excs)\n"
" + Exception Group Traceback (most recent call last):\n"
" | File \"\", line 1, in \n"
" | raise ExceptionGroup('We have some problems', excs)\n"
" | ExceptionGroup: We have some problems (3 sub-exceptions)\n"
" +-+---------------- 1 ----------------\n"
" | Traceback (most recent call last):\n"
" | File \"\", line 3, in \n"
" | f()\n"
" | ~^^\n"
" | File \"\", line 2, in f\n"
" | raise OSError('operation failed')\n"
" | OSError: operation failed\n"
" | Happened in Iteration 1\n"
" +---------------- 2 ----------------\n"
" | Traceback (most recent call last):\n"
" | File \"\", line 3, in \n"
" | f()\n"
" | ~^^\n"
" | File \"\", line 2, in f\n"
" | raise OSError('operation failed')\n"
" | OSError: operation failed\n"
" | Happened in Iteration 2\n"
" +---------------- 3 ----------------\n"
" | Traceback (most recent call last):\n"
" | File \"\", line 3, in \n"
" | f()\n"
" | ~^^\n"
" | File \"\", line 2, in f\n"
" | raise OSError('operation failed')\n"
" | OSError: operation failed\n"
" | Happened in Iteration 3\n"
" +------------------------------------\n"
">>>"