Python 如果未找到参数,则在_init__;中引发异常
我有一个这样的结构:Python 如果未找到参数,则在_init__;中引发异常,python,Python,我有一个这样的结构: def __init__(self, my_param): if my_param: self.my_param = my_param else: raise MYException() 我在某处使用这个值,比如value=self.my_param 但是当我没有传递my_参数时,它不会引发异常,而是说类对象没有my_参数 我怎样才能正确地升高它?这应该可以工作 def __init__(self, my_param=No
def __init__(self, my_param):
if my_param:
self.my_param = my_param
else:
raise MYException()
我在某处使用这个值,比如value=self.my_param
但是当我没有传递my_参数
时,它不会引发异常,而是说类对象没有my_参数
我怎样才能正确地升高它?这应该可以工作
def __init__(self, my_param=None):
if my_param:
self.my_param = my_param
else:
raise MYException()
实际上,当您不向函数传递参数时,引发
TypeError
异常正是python本身所做的,我认为没有必要重写此异常:):
但您也可以使用*args
将参数元组传递给构造函数,以检查args
的有效性,如果您不传递任何内容,则会传递空元组:
class a(object):
def __init__(self, *args):
if args:
self.param = args[0]
else:
raise Exception("Please pass a parameter to instance")
另外,作为一种实用而非pythonic的方法,您可以使用decorator包装您的构造函数:
def my_exp(func):
def wrapper(*args, **kwds):
if args:
return func(*args)
else:
raise Exception("Pleas pass an argument to instance")
return wrapper()
class a(object):
@my_exp
def __init__(self, my_param):
self.param = my_param
演示:
instance = a()
Traceback (most recent call last):
File "/home/kasra/Desktop/ex2.py", line 11, in <module>
class a(object):
File "/home/kasra/Desktop/ex2.py", line 12, in a
@my_exp
File "/home/kasra/Desktop/ex2.py", line 9, in my_exp
return wrapper()
File "/home/kasra/Desktop/ex2.py", line 8, in wrapper
raise Exception("Pleas pass an argument to instance")
Exception: Pleas pass an argument to instance
instance=a()
回溯(最近一次呼叫最后一次):
文件“/home/kasra/Desktop/ex2.py”,第11行,在
a类(对象):
文件“/home/kasra/Desktop/ex2.py”,第12行,在
@我的经验
文件“/home/kasra/Desktop/ex2.py”,第9行,在my_exp中
返回包装器()
文件“/home/kasra/Desktop/ex2.py”,第8行,在包装器中
引发异常(“请将参数传递给实例”)
异常:请将参数传递给实例
您还可以使用其他工具,如
functools.wrapps
等,以创建更灵活的装饰器。但我仍然建议让python为您完成这项工作 为其指定一些默认值,例如object()
,然后检查其值是否与默认值不同。您已经搞错了类定义。把整件事都贴出来。不要重新键入它,复制并粘贴确切的内容。请展示您如何实例化类和实际的回溯。按照您构建\uuuu init\uuuu
方法的方式,my\u param
不是可选的,因此它不可能无法传递。@aryan您也可以将*args
传递给构造函数。签出编辑。
instance = a()
Traceback (most recent call last):
File "/home/kasra/Desktop/ex2.py", line 11, in <module>
class a(object):
File "/home/kasra/Desktop/ex2.py", line 12, in a
@my_exp
File "/home/kasra/Desktop/ex2.py", line 9, in my_exp
return wrapper()
File "/home/kasra/Desktop/ex2.py", line 8, in wrapper
raise Exception("Pleas pass an argument to instance")
Exception: Pleas pass an argument to instance