Supposons que vous ayez une classe personnalisée avec des arguments obligatoires (pour lesquels vous ne pouvez pas fournir de valeur par défaut) et que vous souhaitiez qu'une erreur personnalisée soit déclenchée lorsque ces arguments requis ne sont pas à condition de.Python3: façon correcte de définir une erreur d'initialisation personnalisée
Quelle est la bonne façon pythonique de faire cela?
En ce moment, j'ai quelque chose comme ceci:
class MyClassInitError(Exception):
def __init__(self, missing_kwargs):
self.message = "Some required key word arguments were not present {missing}".format(missing=missing_kwargs)
class MyClass():
# required arguments for this class that can not have pre-defined values
_required_kwargs = ["arg1", "arg2", "arg3",...]
# required arugments for this class that can have pre-defined values
_predef_kwargs = {"pre_arg1":1, "pre_arg2":2, ...}
def __init__(self, **kwargs):
try:
# leverage set class to get keys of required args not in the passed kwargs
missing_kwargs = list(set(self._required_kwargs)-set(kwargs.keys()))
if missing_kwargs:
raise MyClassInitError(missing_kwargs)
# set defaults for defaults not provided
for k, w in self._predef_kwargs.items():
if k not in kwargs.keys():
kwargs[k] = w
Et est il y a un * problème * avec ça? Si vous voulez des suggestions sur l'amélioration ** du code de travail **, voir [codereview.se]. – jonrsharpe
@jonrsharpe Je ne suis pas habitué à définir mes propres exceptions en python et je ne vois pas comment cela ajouterait autre chose que de simplement déplacer l'instruction print là où j'élève l'erreur et retourner None après ... Je vais vérifier Code Review – SumNeuron