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语句移动到引发错误的位置,然后不返回任何异常之外,我不太明白这会增加什么。。。我将检查代码审查