2015-02-07 2 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 , Любая помощь будет оценена!

ответ

0

Заменить строку печати из:

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

с:

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

Первоначальный пытается добавить к Int (resp.status) в строках, как говорится в сообщении об ошибке.

+0

Это редактирование работает отлично! Большое вам спасибо, кажется странным, это второй раздел кода, с которым я столкнулся, который, кажется, написан неправильно. Последний был, если заявления были написаны неправильно, и мне потребовалось некоторое время, чтобы решить проблему. Несмотря на. Как вы думаете, вы могли бы объяснить, почему это сработало? Мне нравится учиться на ошибках, где я могу :) –

+0

Если вы создаете строку с помощью '+', вы должны убедиться, что каждый элемент является 'str'. Например, 'foo =" a "+" b "+" c "' в порядке, но 'bar =" a "+ 1" - нет. Вы можете исправить вторую, сказав «bar =» «+ str (1)» (или в вашем случае 'str (resp.status)'. Но мой предпочтительный вариант - вместо этого использовать форматирование строк - с помощью '%' markers to создайте строку, например, '% s' для str и'% d' для int. Там есть много страниц о том, как использовать форматирование строк в Python, поэтому стоит прочитать несколько примеров. – jlb83

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