2015-02-07 17 views
0

我有一個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 + ")" 

運行代碼後,我得到第20行(最後的打印線)的錯誤,指出:

[email protected]:~$ 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 

所有代碼都在Ubuntu 14.04與Konsole的虛擬機中運行,創造了Gedit的。任何幫助,將不勝感激!

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

與:

回答

0

從更換打印線

print '%s DOWN! (%d, %s)' % (host, resp.status, resp.reason) 

原線將嘗試添加一個int(resp.status)爲字符串,作爲錯誤消息表示。

+0

該編輯工作完美!非常感謝你,這似乎很奇怪,這是我所遇到的第二部分代碼,似乎寫錯了。最後一個有if語句寫錯了,花了我很長時間纔得到解決。而不管。你認爲你可以解釋爲什麼這有效嗎?我喜歡從錯誤中學習,我可以:) – 2015-02-07 22:38:36

+0

如果你使用'+'來構建一個字符串,你必須確保每個項目都是'str'。例如,'foo =「a」+「b」+「c」'可以,但是'bar =「a」+ 1「不是。你可以通過說'bar =「一個」+ str(1)'(或者在你的情況下用'str(resp.status)'來糾正第二種情況。但是我的首選選擇是使用字符串格式 - 使用'%'標記來建立一個字符串,比如用'%s'表示str,用'int d'表示int。關於如何在Python中使用字符串格式 - 有很多頁面 - 所以值得通讀幾個例子。 – jlb83 2015-02-09 09:06:28