PythonNameError:未定义名称“discovery”

2024-06-16 13:21:22 发布

您现在位置:Python中文网/ 问答频道 /正文

把这个放在下面功能。但是有什么想法吗?在

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)

====

^{pr2}$

=


Tags: in功能cmdconfigfordatagetdef
2条回答

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

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

您试图在调用为其赋值的函数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)

此外,即使在修复这些问题时,代码也会抛出另一个错误,因为您试图在函数中访问dictionary data,而该字典也没有赋值。如果它被分配到函数之外的某个地方,您可以通过在函数的开头添加global data来轻松解决这个问题。在

如果你不在任何地方使用pingdom_data作为函数中的参数,为什么还要使用它呢?在

相关问题 更多 >