Python 从教科书运行参数脚本时出错

Python 从教科书运行参数脚本时出错,python,typeerror,traceback,Python,Typeerror,Traceback,我有一个Python初学者编码课程。我们正在使用的书是“为渗透测试人员编写代码,构建更好的工具”。在第二章中,我们开始创建Python脚本,但我似乎不知道这个脚本有什么问题,我应该从书中重新键入。见下文 import httplib, sys if len(sys.argv) < 3: sys.exit("Usage " + sys.argv[0] + " <hostname> <port>\n") host = sys.argv[1] port =

我有一个Python初学者编码课程。我们正在使用的书是“为渗透测试人员编写代码,构建更好的工具”。在第二章中,我们开始创建Python脚本,但我似乎不知道这个脚本有什么问题,我应该从书中重新键入。见下文

import httplib, sys


if len(sys.argv) < 3:
    sys.exit("Usage " + sys.argv[0] + " <hostname> <port>\n")

host = sys.argv[1]
port = sys.argv[2]

client = httplib.HTTPConnection(host,port)
client.request("GET","/")
resp = client.getresponse()
client.close()

if resp.status == 200:
    print host + " : OK"
    sys.exit()

print host + " : DOWN! (" + resp.status + " , " + resp.reason + ")"
导入httplib,sys 如果len(sys.argv)<3: sys.exit(“用法”+sys.argv[0]+“\n”) 主机=sys.argv[1] 端口=sys.argv[2] client=httplib.HTTPConnection(主机、端口) client.request(“GET”、“/”) resp=client.getresponse() client.close() 如果resp.status==200: 打印主机+“:确定” sys.exit() 打印主机+“:向下!(“+resp.status+”,“+resp.reason+”) 运行代码后,我在第20行(最后一行)上收到一个错误,指出:

selmer@ubuntu:~$ python /home/selmer/Desktop/scripts/arguments.py google.com 80
Traceback (most recent call last):
  File "/home/selmer/Desktop/scripts/arguments.py", line 20, in <module>
    print host + " : DOWN! (" + resp.status + " , " + resp.reason + ")"
TypeError: cannot concatenate 'str' and 'int' objects
selmer@ubuntu:~$python/home/selmer/Desktop/scripts/arguments.py google.com 80
回溯(最近一次呼叫最后一次):
文件“/home/selmer/Desktop/scripts/arguments.py”,第20行,在
打印主机+“:向下!(“+resp.status+”,“+resp.reason+”)
TypeError:无法连接'str'和'int'对象

所有代码都是在Ubuntu14.04的虚拟机上运行的,使用Konsole并在Gedit中创建。任何帮助都将不胜感激

从以下位置替换打印行:

print host + " : DOWN! (" + resp.status + " , " + resp.reason + ")"
与:


原始行尝试将int(
resp.status
)附加到字符串,如错误消息所示。

编辑工作正常!非常感谢,看起来很奇怪,这是我遇到的第二段代码,它似乎写错了。最后一个问题的if语句写得不正确,我花了很长时间才解决。不管你认为你能解释为什么这样做有效吗?我喜欢从错误中学习:)如果您使用
+
构建字符串,则必须确保每个项目都是
str
。例如,
foo=“a”+“b”+“c”
可以,但
bar=“a”+1
不行。你可以通过说
bar=“a”+str(1)
(或者在你的例子中是
str(各自的状态)来纠正第二个错误
。但我更喜欢的选择是使用字符串格式-使用
%
标记构建字符串,例如,str为
%s
,int为
%d
。关于如何在Python中使用字符串格式,有很多页面-因此值得阅读一些示例。
print '%s DOWN! (%d, %s)' % (host, resp.status, resp.reason)