Gestion des exceptions Python un peu plus pratique

Par exemple, je souhaite envoyer une exception spécifique en tant que classe d'exception différente dans ma propre bibliothèque

Puis-je l'utiliser dans une scène où j'ai défini des exceptions pour une bibliothèque et encapsuler des exceptions intégrées est un problème?

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]

Le premier est MyException et le second est TypeError

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

Attrapez l'exception et modifiez la valeur de retour

Un contrôle précis est impossible.

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

Gestion des exceptions Python un peu plus pratique
Gestion des exceptions Python
Gestion des exceptions Python
Python, à propos de la gestion des exceptions
Gestion des exceptions Python (mémo d'apprentissage Python ⑥)
Un peu plus sur le FIFO
Gestion des exceptions lors de la communication de l'API Python
Un peu plus sur les références ~ Prenant Python et Java comme exemples ~
Gestion des exceptions
J'ai essayé de résumer la gestion des exceptions Python
Un chercheur d'une société pharmaceutique a résumé la gestion des exceptions de Python
Importation de modules et gestion des exceptions en python
Gestion des erreurs Python
Une histoire sur la gestion des données binaires en Python
gestion des exceptions boto3
Gestion des fuseaux horaires Python
Exception: vous avez besoin d'un compilateur C pour générer l'erreur uWSGI en python: 3.8-alpine
Python Ver. Présentation de WebPay avec un peu de code
[Hikari-Python] Chapitre 07-01 Gestion des exceptions (erreurs et exceptions)
Lire un peu plus arch / arm / boot / compressé / Makefile
[Python] Une bibliothèque pratique qui convertit les kanji en hiragana
[python] [Gracenote Web API] Une petite personnalisation de pygn
(Pour moi) Flask_2 (liste et pour, étend, et un peu plus)
Algorithme A * (édition Python)
[Python] Prenez une capture d'écran
Manipuler yaml avec python
Créer un module Python
Méthodes pratiques de Python, etc.
Message d'exception en Python
Démoniser un processus Python
Gestion des points décimaux Python
Comment gérer l'hexadécimal en Python3
Créer un environnement Python
Python3> rond (a --b, 7)
Liste des classes d'exception Python
Fizzbuzz avec gestion des exceptions
Jetez un œil à l'arborescence des exceptions intégrée à Python