我是Python的初学者,我需要一些关于装饰器的帮助。我正在编写一些方法,它们调用使用swagger生成的其他方法。基本上所有这些招摇过市的方法都有GETAPI。我在代码中需要做的就是调用那些招摇过市的方法并返回值。我正在寻找优化方法,而不是为每个API编写相同的方法。我遇到了可以在这种情况下使用的装饰器。但我的实现并没有达到预期的效果
def get_component_info(self, func):
def inner():
data = None
try:
ret = func()
if ret.status == 200:
log.info('ret ' + str(ret))
else:
logging.error('Error: ' + str(ret.text))
except Exception as e:
logging.error(" failed with error " + str(e.reason) +
" and error code " + str(e.status))
finally:
return data
return inner()
def get_firewall_info(self):
return self._monitor.list_firewall_monitors_with_http_info() <-- swagger method
def get_firewall_info_caller(self):
get_firewall_info = self.get_component_info(self.get_firewall_info())
但是上面的实现总是返回None,因为它从不执行self._monitor.list_firewall_monitors_with_http_info()
,但是测试没有失败
如果你帮我解决这个问题,那么我可以用它来获取服务器信息、身份验证信息、网络信息等。如果不能使用decorator,我还可以用什么来优化它
谢谢
修饰符通常是将第二个函数作为参数,然后定义并返回第三个函数的函数,该函数在更改第二个函数的输入和/或输出时调用第二个函数。看起来你在这方面比我初学者做的更好
我向您的装饰程序建议的唯一更改不是调用
inner
并返回结果,而是返回函数本身。进行此更改时,您必须在返回后调用您现在返回的函数看起来您的bug的核心是您没有向
get_component_info
提供函数;您正在提供调用该函数的结果。我认为将代码更改为不调用get_firewall_info
应该可以修复代码我解决了它,如下所示。不确定这是否是正确的方法。请纠正我
相关问题 更多 >
编程相关推荐