PythonNameError:未定义名称“发现”

时间:2018-07-13 20:16:54

标签: python zabbix pingdom

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

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

=====

2 个答案:

答案 0 :(得分:0)

您正在使用discovery,然后在函数调用中将其声明。

此外,正如您在函数中声明的那样,它会在其末尾销毁,并且在主作用域中将不可用。

答案 1 :(得分: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作为函数的参数?