首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PythonNameError:未定义名称'discovery‘

PythonNameError:未定义名称'discovery‘
EN

Stack Overflow用户
提问于 2018-07-14 04:16:54
回答 2查看 954关注 0票数 -1

下面这篇文章是关于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

=====

EN

回答 2

Stack Overflow用户

发布于 2018-07-14 04:19:19

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

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

票数 0
EN

Stack Overflow用户

发布于 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,为什么你要在函数中使用它作为参数呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51332269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档