NameError:未定义名称"_name_"

Cin*_*gpi 0 python syntax error-handling mininet sdn

我在stackoverflow中经历了类似的问题,但找不到接近我的问题的答案.在最后一行之前的3行下面的代码给出错误 -

NameError: name '_name_' is not defined

我从大学实验室指南中复制了以下代码.不确定,代码是如何工作的.我们被告知要复制并粘贴本实验室并查看结果.但是,我们必须在命令行中输入所有代码而且我被卡住了.我怎么能在代码中修复这个错误?

#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.util import dumpNodeConnections
from mininet.log import setLogLevel
class SingleSwitchTopo(Topo):
    “Single switch connected to n hosts.”
def_init_(self,n=2,**opts):
#initialize topology and default options
      Topo._init_(self,**opts)
      switch=self.addSwitch(‘s1’)
#Python’s range(N) generates 0..N-1
      for h in range(n):
           host=self.addHost(‘h%s’%(h+1))
           self.addLink(host,switch)
def simpleTest():
     “Create and test a simple network”
      topo=SingleSwitchTopo(n=4)
      net=Mininet(topo)
      net.start
      print “Dumping host connections”
      dumpNodeConnections(net.hosts)
      print “Testing network connectivity”
      net.pingAll()
     net.stop()
if _name_==’_main_’:
     #Tell mininet to print useful information
     setLogLevel(‘info’)
     simpleTest()
Run Code Online (Sandbox Code Playgroud)

Ana*_*mar 12

问题在于 -

if _name_==’_main_’:
Run Code Online (Sandbox Code Playgroud)

我的猜测是你有这条线,所以代码只在作为脚本运行时运行,而不是在导入时运行,如果是这样,你需要双方下划线name以及main.并且看起来像引号是错误的,你需要使用'.示例 -

if __name__=='__main__':
Run Code Online (Sandbox Code Playgroud)

  • 键盘上单引号或双引号的键由您键入的程序解释.字处理器可能会将其解释为单引号(在单词的开头和结尾处相反的方向卷曲.)这些是不同的字符,如果从WYSIWYG字处理器复制到编程环境中,则会产生错误.即便如此,我怀疑你的错误是单个下划线而不是__name__两侧的双下划线. (2认同)

小智 5

您需要两个下划线而不是一个:

if __name__ == "__main__"

Python直接执行它.如果省略它将执行从第0级压缩的所有代码.

  • *Python 直接执行它。如果省略,它将执行从第 0 级缩进开始的所有代码。* 是错误的。Python直接从第0级缩进执行所有内容,导入模块时,`__name__`设置为模块名称,当使用`python <sript>.py`将Python代码作为脚本运行时,`__name__`设置为`__main__ `。 (2认同)
  • @Sb Sangpi:那不会有任何区别。 (2认同)