Форум сайта python.su
2
Как-же их ловить?
Смотрю в книгу вижу фигу..
Не получаеться их ловить.
@contextlib.contextmanager def die_on_error(): try: yield except Exception: logging.error("exception in asynchronous operation",exc_info=True) sys.exit(1) with StackContext(die_on_error): # Any exception thrown here *or in callback and its desendents* # will cause the process to exit instead of spinning endlessly # in the ioloop. http_client.fetch(url, callback) ioloop.start()
AttributeError: 'NoneType' object has no attribute 'do_handshake'
HTTPError: HTTP 599: [Errno 111] Connection refused
Офлайн
32
AsyncHTTPClient вроде не вызывает исключения, он возвращает переменную error при ошибках.
Можно попробовать запустить все через tornado.gen.Task.
Давайте полный пример, который можно запустить.
Офлайн
2
import tornado.ioloop import tornado.httpclient def handle_request(response): if response.error: print "Error:", response.error else: print response.body tornado.ioloop.IOLoop.instance().stop() http_client = tornado.httpclient.AsyncHTTPClient() http_client.fetch("http://www.hjohj.com/", handle_request) tornado.ioloop.IOLoop.instance().start()
Офлайн
32
Добавьте строку в начале:
tornado.httpclient.AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient")
Офлайн
32
Решил попробовать стандартный fetch…
все просто
Пример этот как надо не работает(не ловит исключения),…Не ловится потому что нет исключения (там варниниг валится, который сбил с толку), вам вернулся error, теперь вы можете сами вызвать исключение если хотите
if response.error: raise Exception(response.error)
Отредактировано o7412369815963 (Янв. 26, 2013 11:35:31)
Офлайн
2
Не ловится потому что нет исключения (там варниниг валится, который сбил с толку), вам вернулся error, теперь вы можете сами вызвать исключение если хотитеWarning как я понимаю это.
WARNING:root:uncaught exceptionА исключение сразу после него?
Traceback (most recent call last):
File “/usr/local/lib/python2.7/dist-packages/tornado/simple_httpclient.py”, line 318, in cleanup
yield
File “/usr/local/lib/python2.7/dist-packages/tornado/simple_httpclient.py”, line 174, in __init__
0, 0)
gaierror: No address associated with hostname
Офлайн
32
Нет, исключения нет вообще, иначе “hello” и “finish” не вывелось бы:
import tornado.ioloop import tornado.httpclient def handle_request(response): if response.error: print "Error:", response.error else: print response.body print 'hello' tornado.ioloop.IOLoop.instance().stop() http_client = tornado.httpclient.AsyncHTTPClient() http_client.fetch("http://www.hjohj.com/", handle_request) tornado.ioloop.IOLoop.instance().start() print 'finish'
WARNING:root:uncaught exception Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/tornado/simple_httpclient.py", line 318, in cleanup yield File "/usr/local/lib/python2.7/dist-packages/tornado/simple_httpclient.py", line 174, in __init__ 0, 0) gaierror: [Errno -5] No address associated with hostname Error: [Errno -5] No address associated with hostname hello finish
Офлайн
2
Только сейчас понял что это сообщение logging, дабы не лезли когда не надо.
Убрал так.
tornado.simple_httpclient.logging.basicConfig(level = ERROR)
Отредактировано mironich (Янв. 28, 2013 02:14:11)
Офлайн