2015-12-11 3 views
1

У меня есть следующий фрагмент кода в приложении GAE - там очень мало приложение, но этоHttpConnection .getresponse() выдает ошибку неуловимой в моем приложении GAE

class Check(webapp.RequestHandler): 
    def get(self): 
     sites = [  
      [1, 0, 'the google', 'www.google.com', '555-0123'] 
     ] 

     for site in sites: 
      try: 
       print "checking " + site[3] + "\r\n" 
       conn = httplib.HTTPConnection(site[3]) 
       conn.request("GET", "/") 
       r1 = conn.getresponse() 
       print r1.status + "\r\n" 
      except: # catch *all* exceptions 
       e = sys.exc_info()[0] 
       print e 

Это дает мне ответ :

Error: Server Error

The server encountered an error and could not complete your request.

Please try again in 30 seconds.

Если я закомментируйте строку print r1.status + "\r\n" метод выполняется только штрафом. Должно ли except: поймать это исключение для меня?

Что еще более важно, почему это бросает исключение в первую очередь?

+0

BTW, не значит 'сопп = httplib.HTTPConnection (сайт)' (или 'сопп = httplib.HTTPConnection (сайты [3])') вместо 'сопп = httplib.HTTPConnection (сайт [3 ]) '? –

+0

нет, сайт [3] является третьим пунктом на сайте. это 2-й массив. 'для сайта в сайтах:' – roryok

+0

'для сайта в сайтах' делает' site' a s строкой, поэтому 'site [3]' является четвертым символом в этой строке 'site'. –

ответ

1

Это не исключение исключение (как в случае исключения кода передачи), это всего лишь ответ сервера, который идеально подходит для передачи сообщения.

Вы должны обратиться к этому по-другому, на уровне протокола связи, выше уровня передачи связи.

Обновление: Вышеупомянутое примечание означает ответ, который вы упомянули, что меня ввел в заблуждение.

Как именно вы получаете его я не уверен, но причина для исключения вашей печати линия:

File "blah.py", line 187, in post 
    print r1.status + "\r\n" 
TypeError: unsupported operand type(s) for +: 'long' and 'str' 

Вы можете заменить строку с чем-то вроде этого, чтобы избежать исключения:

print "%s\r\n" % r1.status 
+0

действует как исключение. с включенной линией кода, я получаю это каждый раз. Если я испортил строку (забудьте двоеточие после утверждения if, например), я получаю ту же ошибку – roryok

+0

, поэтому IMHO лучше использовать 'logging.exception()' вместо пользовательской 'print e' - по крайней мере вы получаете трассировку, которая обычно помогает выяснить, что происходит. –

+0

Я в конечном итоге попробовал _exactly_ ваш код и получил это в консоли python для 'print r1.status +" \ r \ n "' строка: 'TypeError: неподдерживаемый тип операндов для +: 'int' и 'str' '(немного отличается в проекте GAE:' TypeError: неподдерживаемый тип операндов для +: 'long' и 'str'') –

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