Python-Ausnahmebehandlung etwas bequemer

Ich möchte beispielsweise eine bestimmte Ausnahme als andere Ausnahmeklasse in meiner eigenen Bibliothek senden

Kann ich es in einer Szene verwenden, in der ich Ausnahmen für eine Bibliothek definiert habe und das Umschließen integrierter Ausnahmen ein Problem ist?

import functools

class MyException(Exception):
    def __init__(self, original, *args, **kwargs):
        super(MyException, self).__init__(str(original), *args, **kwargs)
        self.original = original

def raise_as(except_classes, target_class):
    def wrapper(f):
        @functools.wraps(f)
        def wrapper_inner(*args, **kwargs):
            try:
                return f(*args, **kwargs)
            except except_classes as e:
                raise target_class(e)
        return wrapper_inner
    return wrapper

@raise_as(IndexError, MyException)
def func(a):
    l = [1,2]
    return l[a]

Die erste ist MyException und die zweite ist TypeError

func(3)  # MyException
func('hoge')  # TypeError

Fangen Sie die Ausnahme ab und ändern Sie den Rückgabewert

Feinsteuerung ist nicht möglich.

def try_return(except_classes, value=None):
    def wrapper(f):
        def wrapper_inner(*args, **kwargs):
            try:
                return f(*args, **kwargs)
            except except_classes:
                return value
        return wrapper_inner
    return wrapper

@try_return(ZeroDivisionError, None)
def func(x):
    return 1 / x

print func(1) # 1
print func(0) # None

Recommended Posts

Python-Ausnahmebehandlung etwas bequemer
Behandlung von Python-Ausnahmen
Behandlung von Python-Ausnahmen
Python, über die Ausnahmebehandlung
Behandlung von Python-Ausnahmen (Python-Lernnotiz ⑥)
Ein bisschen mehr über FIFO
Ausnahmebehandlung während der Python-API-Kommunikation
Ein bisschen mehr über Referenzen ~ Verwenden von Python und Java als Beispiele ~
Ausnahmebehandlung
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ein Forscher eines Pharmaunternehmens fasste die Ausnahmebehandlung von Python zusammen
Modulimport und Ausnahmebehandlung in Python
Python-Fehlerbehandlung
Eine Geschichte über den Umgang mit Binärdaten in Python
boto3 Ausnahmebehandlung
Python-Zeitzonenbehandlung
Ausnahme: Sie benötigen einen C-Compiler, um einen uWSGI-Fehler in Python: 3.8-alpine zu erstellen
Python Ver. Einführung in WebPay mit ein wenig Code
[Hikari-Python] Kapitel 07-01 Ausnahmebehandlung (Fehler und Ausnahmen)
Lesen Sie etwas mehr Arch / Arm / Boot / Compressed / Makefile
[Python] Eine praktische Bibliothek, die Kanji in Hiragana konvertiert
[Python] [Gracenote Web API] Eine kleine Anpassung von Pygn
(Für mich) Flask_2 (Liste und für, erweitert und ein bisschen mehr)
Ein * Algorithmus (Python Edition)
[Python] Machen Sie einen Screenshot
Umgang mit Yaml mit Python
Erstellen Sie ein Python-Modul
Bequeme Methoden von Python usw.
Ausnahmemeldung in Python
Dämonisiere einen Python-Prozess
Pythons Umgang mit Dezimalstellen
Umgang mit Hexadezimal in Python3
Erstellen Sie eine Python-Umgebung
Python3> rund (a - b, 7)
Liste der Python-Ausnahmeklassen
Fizzbuzz mit Ausnahmebehandlung
Sehen Sie sich die in Python integrierte Ausnahmebaumstruktur an