HOWTO · Python
Warnungen in Python unterdrücken
Dieses Tutorial zeigt, wie Sie die Warnungen in den Programmen in Python unterdrücken.
Auf dieser Seite
Um Python-Warnungen zu unterdrücken, wählen Sie den passenden Geltungsbereich: Verwenden Sie warnings.filterwarnings() für ein Skript, python -W ignore script.py für einen einzelnen Prozess oder setzen Sie PYTHONWARNINGS=ignore, bevor Sie Python starten. Sie können auch eine bestimmte Warnungskategorie filtern oder mit einem Kontextmanager Meldungen nur innerhalb eines bestimmten Codeblocks unterdrücken.
Warnungen weisen auf Umstände hin, die Aufmerksamkeit erfordern können, etwa die Verwendung einer veralteten API. Sie beenden die Ausführung nicht von selbst. Ausnahmen stehen dagegen für Laufzeitfehler, die einen bestimmten Vorgang unterbrechen oder, wenn sie nicht behandelt werden, weitergereicht werden können. Lesen Sie eine Warnung, bevor Sie sie ausblenden: Durch die Unterdrückung kann ein Kompatibilitätsproblem verborgen bleiben, das später relevant wird.
Warnungen mit dem warnings-Modul unterdrücken
Mit dem Standardbibliotheksmodul warnings kann ein Skript Meldungen filtern. Rufen Sie warnings.filterwarnings("ignore") auf, um Warnungen im gesamten Prozess zu ignorieren, oder geben Sie Kriterien wie eine Kategorie oder einen Meldungstext an, um nur eine Teilmenge zu erfassen. Filter wirken sich auf passende Warnungen aus; andere bleiben sichtbar. Platzieren Sie einen eng gefassten Filter in der Nähe des betroffenen Codes und entfernen Sie ihn, sobald Sie das zugrunde liegende Problem behoben haben.
Führen Sie das eigenständige Beispiel aus:
import warnings
warnings.filterwarnings("ignore", category=UserWarning, message="cache is stale")
warnings.warn("cache is stale", UserWarning)
print("program continues")
program continues
Der Filter erfasst UserWarning-Meldungen, die mit dem angegebenen Text beginnen, und blendet die passende Warnung daher aus. Die abschließende Ausgabe zeigt, dass das Programm nach dem Warnungsaufruf weiterläuft. Die Beschriftung in der unveränderten Beispielausgabe bleibt auf Englisch.
Für einen vorübergehenden Filter verwenden Sie warnings.catch_warnings() und richten den Filter innerhalb des with-Blocks ein. Beim Verlassen des Blocks stellt Python den Warnungsfilterzustand wieder her, der zu Beginn aktiv war. Das ist nützlich bei einem bekannten Vorgang, der viele Warnungen ausgibt, wenn anderer Code weiterhin der üblichen Warnungsrichtlinie folgen soll. Ein mögliches Muster ist with warnings.catch_warnings(): warnings.simplefilter("ignore", category=DeprecationWarning); operation(). Lassen Sie den Vorgang innerhalb des Blocks; nachfolgende Aufrufe verwenden wieder die zuvor aktiven Filter.
Warnungen über die Befehlszeile unterdrücken
Übergeben Sie Pythons Option -W vor dem Skriptnamen, um beim Start des Interpreters einen Warnungsfilter festzulegen. Um Warnungen für diesen Prozess zu ignorieren, führen Sie python -W ignore script.py oder die gleichwertige Kurzform python -Wignore script.py aus. Die geschützte Schreibweise -Wignore besteht aus der Option unmittelbar gefolgt von der Aktion ignore. Ersetzen Sie script.py durch den Namen Ihrer Datei und lassen Sie etwaige Skriptargumente dahinter stehen.
Die Option gilt ab dem Start dieses Interpreters und ändert das Skript nicht. Sie eignet sich, wenn Sie ein Werkzeug ausführen, das Sie nicht ändern können, oder wenn Sie den Filter nur für einen einzelnen Aufruf benötigen. Ein Befehlszeilenfilter kann während des gesamten Laufs nützliche Diagnosen ausblenden. Bevorzugen Sie daher einen Filter für eine bestimmte Kategorie, wenn eine pauschale Unterdrückung benötigte Informationen verbergen würde.
Warnungen mit der Umgebungsvariablen PYTHONWARNINGS unterdrücken
Setzen Sie PYTHONWARNINGS vor dem Start von Python, um dem neuen Prozess Warnungsfilteraktionen zu übergeben. Verwenden Sie zum Beispiel in einer POSIX-Shell PYTHONWARNINGS=ignore python script.py; in PowerShell setzen Sie $env:PYTHONWARNINGS = "ignore" und führen anschließend python script.py aus. Diese Zuweisungen sind shellspezifisch. Die Variable muss in der Umgebung vorhanden sein, wenn der Interpreter gestartet wird.
Die Umgebungsvariable ist nützlich, wenn ein Starter oder eine Bereitstellungsumgebung den Prozess steuert. Sie wirkt sich auf Python-Prozesse aus, die mit dieser Umgebung gestartet werden, ändert aber nicht die Warnungsrichtlinie eines bereits laufenden Interpreters. Entfernen Sie die Variable oder setzen Sie einen enger gefassten Filter, wenn Warnungen wieder sichtbar sein sollen. Unterdrücken Sie bei allen drei Methoden nur Meldungen, die Sie geprüft haben, und überprüfen Sie den Filter erneut, wenn sich Abhängigkeiten oder APIs ändern.