我有自己的python库。然后使用装饰器@send_transport
。
@send_transport(program_version=__version__, entity=1)
def post(self):
pass
我可以实现这样的东西吗?
try:
from spo_client import send_transport
except ImportError:
pass
else:
@send_transport(program_version=__version__, entity=1)
def post(self):
pass
答案 0 :(得分:4)
为了实现您的目标,您可以做
try:
from spo_client import send_transport
decorator = send_transport(program_version=__version__, entity=1)
except ImportError:
decorator = lambda f: f
@decorator
def post(self):
pass
这将创建“正确的”装饰器或将其上的功能转换为自身的虚拟对象,即。 e。别管它。
另一种选择是定义虚拟send_transport
函数:
def dummy_send_transport(*a, **k):
return lambda f: f
try:
from spo_client import send_transport
except ImportError:
send_transport = dummy_send_transport
# or just send_transport = lambda *a, **k: lambda f: f
# but then the code would be less self-documenting.
@send_transport(program_version=__version__, entity=1)
def post(self):
pass
在这种情况下,发生导入错误时,send_transport()
将替换为仅返回NOP装饰器但可以称为其“原始”版本的版本。在这里,您可以在代码中进行几个不同的send_transport
调用,而不必为它们预定义变量。