Python 3.x Python3:定义自定义init错误的正确方法

Python 3.x Python3:定义自定义init错误的正确方法,python-3.x,exception-handling,Python 3.x,Exception Handling,假设您有一个自定义类,该类具有一些必需的参数(您不能为其提供默认值),并且您希望在未提供这些必需参数时引发一个自定义错误 什么是正确的蟒蛇方式来做这件事 现在我有这样的事情: class MyClassInitError(Exception): def __init__(self, missing_kwargs): self.message = "Some required key word arguments were not present {missing}"

假设您有一个自定义类,该类具有一些必需的参数(您不能为其提供默认值),并且您希望在未提供这些必需参数时引发一个自定义错误

什么是正确的蟒蛇方式来做这件事

现在我有这样的事情:

 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
引入了需要关键字参数的语法,因此无需编写自己的代码来执行验证:

 def __init__(self, *, arg1, arg2, arg3, pre_arg1=1, pre_arg2=2):
     pass # TODO: use the args, no need to check them

这有什么问题吗?如果您想获得改进工作代码的建议,请参阅。@jornsharpe我对用python定义自己的异常还不熟悉,除了将print语句移动到引发错误的位置,然后不返回任何异常之外,我不太明白这会增加什么。。。我将检查代码审查