下面这篇文章是关于error ..any function.But的想法吗?
def zabbix_discovery(pingdom_data):
discovery = []
for k,v in data["recipes"].items():
discovery.append(
{"{#NAME}": str(v['name'])}
)
cmd_args = [
'zabbix_sender',
'-z', config.get('ZABBIX', 'server'),
'-p', config.get('ZABBIX', 'port'),
'-s', config.get('ZABBIX', 'host'),
'-k', config.get('ZABBIX', 'key1'),
'-o', "'{ \"data\": " + discovery + " }'"
]
zabbix_trapper(cmd_args)
=====
Traceback (most recent call last):
File "txncheck_backup.py", line 52, in <module>
'-o', "'{ \"data\": " + discovery + " }'"
NameError: name 'discovery' is not defined
=====
发布于 2018-07-14 04:19:19
在函数调用中声明discovery
之前,您正在使用它。
此外,当您在函数中声明它时,它将在它的末尾被销毁,并且在主作用域中不可用。
发布于 2018-07-14 04:28:53
在调用为其赋值的函数zabbix_discovery
之前,您正在尝试访问它。即使您纠正了这个逻辑错误,您仍然无法访问discovery
变量,因为它是一个局部变量。您可以将return discovery
添加到函数的末尾,然后添加discovery = zabbix_discovery(pingdom_data)
,或者将其设置为全局变量。前者看起来有点像这样:
discovery = []
def zabbix_discovery(pingdom_data):
global discovery
do what you want to do with it
zabbix_discovery(args)
而且,即使你修复了这些东西,你的代码也会抛出另一个错误,因为你试图在你的函数中访问字典data
,它也没有赋值。如果它是在函数之外的某个地方赋值的,那么可以通过在函数的开头添加global data
来轻松解决这个问题。
如果你不在任何地方使用pingdom_data
,为什么你要在函数中使用它作为参数呢?
https://stackoverflow.com/questions/51332269
复制相似问题