-1

具有以下功能。但是出现错误..有什么想法吗?

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

=====

4

2 回答 2

0

discovery您在函数调用中声明它之前正在使用它。

此外,当您在函数中声明它时,它将在其末尾被销毁,并且在主范围内不可用。

于 2018-07-13T20:19:19.233 回答
0

您正在尝试在调用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如果你不在任何地方使用它,为什么你的函数中有一个参数?

于 2018-07-13T20:28:53.003 回答