Python 蟒蛇:名称';发现';没有定义

Python 蟒蛇:名称';发现';没有定义,python,zabbix,pingdom,Python,Zabbix,Pingdom,有下面的功能。但是得到错误。有什么想法吗 def zabbix_discovery(pingdom_data): discovery = [] for k,v in data["recipes"].items(): discovery.append( {"{#NAME}": str(v['name'])} ) cmd_args = [

有下面的功能。但是得到错误。有什么想法吗

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)
=====

回溯(最近一次呼叫最后一次):
文件“txncheck_backup.py”,第52行,在
'-o',“{\'数据\”:“+discovery+”}”
NameError:未定义名称“发现”

====

在函数调用中声明发现之前,您正在使用发现


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

在调用为其赋值的函数
zabbix\u discovery
之前,您正在尝试访问它。即使您纠正了这个逻辑错误,您仍然无法访问
discovery
变量,因为它是一个局部变量。您可以将
return discovery
添加到函数末尾,然后将
discovery=zabbix_discovery(pingdom_数据)
,或者将其设为全局变量。前者看起来有点像这样:

discovery = []
def zabbix_discovery(pingdom_data):
    global discovery
    do what you want to do with it
zabbix_discovery(args)
而且,即使您修复了这些问题,您的代码也会抛出另一个错误,因为您试图访问函数中的dictionary
data
,该函数也没有赋值。如果它被分配到函数之外的某个位置,您可以通过在函数的开头添加
全局数据
来轻松修复它


如果在任何地方都不使用,为什么函数中会有
pingdom\u数据
作为参数呢?

你忘了问一个问题。无论如何,
discovery
仅在其定义的范围内可用。您必须
返回一个值,例如…对不起..我如何返回它?“返回发现”是否有效?您可以删除
pingdom\u数据
,因为它不在任何地方使用
discovery = []
def zabbix_discovery(pingdom_data):
    global discovery
    do what you want to do with it
zabbix_discovery(args)