2015-08-12 2 views
0

Я рассмотрел аналогичный вопрос в stackoverflow, но не смог найти ответ рядом с моей проблемой. В коде ниже 3 строки до последней строки дают ошибку -NameError: name '_name_' не определен

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() 
+0

Пожалуйста, откорректируйте программу правильно. –

+0

Также вы должны написать ошибку как есть. Вероятно, это говорит 'NameError: name '_name_' не определен'. – skyking

+1

Вы используете одиночные символы подчеркивания '_name_' и' '_main_''. Вы должны использовать двойные подчеркивания: '__name__' и' '__main __ '' –

ответ

9

Проблема заключается в строке -

if _name_==’_main_’: 

Моя догадка у вас есть эта линия так, что код работает только при запуске в качестве сценария, а не при импорте, если да, то вам нужно дважды подчеркивание с обеих сторон от name, а также main. И похоже, что котировки ошибочны, вам нужно использовать '. Пример -

if __name__=='__main__': 
+0

Я не уверен, что два кода, на которые вы ответили, не выглядят иначе, кроме взгляда! Разве это не только клавиша на клавиатуре? извините ... Я didnt получаю it.thx –

+0

хорошо, вы можете видеть, как SO форматирует их, может быть, некоторая проблема, когда вы скопировали код в SO, если вы на самом деле не получаете никаких ошибок для этого в вашем коде на Python, тогда сделайте не возражайте. Это может вызвать некоторые проблемы при использовании редакторов, которые поддерживают другие кодировки, а ваш скрипт определяется в некоторой кодировке, например, utf-8. –

+0

Если бы ответ был полезен для вас, я хотел бы посоветовать вам принять ответ (нажав на отметку с левой стороны), это было бы полезно сообществу. –

0

В

if _name_==’_main_’: 

вы не написали код, используя двойное подчеркивание, она должна быть следующая

if __name__==’__main__’: 

спасибо за ответ выше, они указали ошибка для меня еще не ясна. Я объясняю свой вопрос.

+0

Не добавляйте свой собственный ответ, принимайте тот, который сказал вам об этом. Обратите внимание, что у вас также есть, например, '_init_' с точно такой же проблемой. – jonrsharpe

3

Вам нужно два подчеркивания вместо одного:

if __name__ == "__main__"

Python выполняет, что непосредственно. Если его оставить вне, он выполнит весь код с 0-го уровня отступа.

+0

* Python выполняет это напрямую. Если его оставить вне, он выполнит весь код с 0-го уровня отступа. * Неверно.Python выполняет все непосредственно с 0-го уровня отступа, при импорте модуля, '__name__' устанавливается на имя модуля, при запуске кода python в качестве скрипта с использованием' python .py' '__name__' устанавливается в' __main__'. –

+0

Это должно быть только «цитата, а не» для основного. –

+0

@Sb Sangpi: Это не будет иметь никакого значения. – Matthias

Смежные вопросы