将代码放入函数中时a未定义

奥里·利维

我有一个scapy嗅探器,它不在以下函数中时运行良好:

from scapy.all import *


a = 0

def f(packet):
    global a
    a+=1



s = sniff(prn=f, timeout=1, iface='en0', store=0)
print(a)

但是当我将代码放入这样的函数中时:

from scapy.all import *


def sniffer():
    a = 0

    def f(packet):
        global a
        a+=1



    s = sniff(prn=f, timeout=1, iface='en0', store=0)
    return a

print(sniffer())

它返回:

File "/Users/test.py", line 9, in f
    a+=1
NameError: name 'a' is not defined

似乎可以解决此问题,所以我将不胜感激。

萨尔茨

a不是全局变量,因为它是在sniffer()函数内部定义的做你想做的事,你应该使用nonlocal而不是global

from scapy.all import *


def sniffer():
    a = 0

    def f(packet):
        nonlocal a
        a+=1



    s = sniff(prn=f, timeout=1, iface='en0', store=0)
    return a

print(sniffer())

有关该nonlocal声明的更多信息https ://docs.python.org/3/reference/simple_stmts.html ? highlight = nonlocal# the- nonlocal-statement

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将 C++ 代码放入 C 时对 `function()' 的未定义引用

如何将PHP代码放入jQuery函数中

将执行时序代码放入函数OpenCV中?

将所有代码放入函数中

如何将重复的jQuery代码放入子例程或函数中?

构建时如何将代码放入Docker映像

将Google Analytics(分析)代码放入JS文件中

将jsonAsync代码放入单独的类中... Android

如何将 PHP 代码放入 JavaScript 中?

将值放入未定义的数组

当我将Javascript函数从内联代码移动到单独的js文件时,出现“函数未定义”的信息

源代码中的javascript函数,但未“未定义”

如何修复此代码-函数中未定义变量

Android:将网址代码放入AsyncTask

Swift将HTML代码放入URL

在Geth中复制合同代码时未定义

编译时SIFT代码(C ++)中的未定义引用

尝试将数据放入MongoDB时无法读取未定义的属性“插入”

导出某些内容时,函数中的“this”未定义

当我从服务中调用函数时,“ this”是未定义的

在Python包中运行测试时未定义函数

在Linux中执行线程时对函数的未定义引用

在声明的函数中时,this.id返回未定义

在函数中调用变量时始终未定义

当我将相同的代码放入函数与内联C编写时,结果不同

为什么将分配代码放入函数时会出现“缓冲区空间不足”?

我可以将jquery代码放入一堆纯JavaScript代码中吗?

HTML-CSS-一旦将代码放入div内,悬停时自定义div弹出窗口就不会出现

错误LNK2019:将代码放入cpp文件时出现无法解析的外部符号