Ошибка времени выполнения Python, может вывести файл? - PullRequest
2 голосов
/ 15 февраля 2009

Я использую libcurl для DL веб-страницы, затем сканирую ее на данные и что-то делаю с одной из ссылок. Однако время от времени страница отличается от i, за исключением того, что я извлекаю неверные данные, и pycurl выдает исключение. Я попытался найти имя исключения для pycurl, но безуспешно.

Есть ли способ заставить трассировку выполнить функцию, чтобы я мог вывести файл, чтобы я мог посмотреть на ввод файла и увидеть, был ли мой код неверным?

Ответы [ 3 ]

3 голосов
/ 15 февраля 2009

sys.excepthook может помочь вам здесь, где вы можете установить глобальный обработчик исключений. Я не уверен, как обрабатываются исключения Pycurl, поскольку это библиотека привязки, но, вероятно, она будет работать, чтобы переназначить ее универсальной функции Что-то вроде:

>>> import sys
>>> 
>>> def my_global_exception_handler(type, value, traceback):
...     print traceback
...     sys.exit()
... 
>>> sys.excepthook = my_global_exception_handler
>>> raise
<traceback object at 0xb7cfcaa4>

Эта функция перехвата исключений может легко быть методом экземпляра, который имеет доступ к файлу, который должен быть выгружен.

3 голосов
/ 15 февраля 2009

Вы можете использовать универсальный обработчик исключений.

logging.basicConfig( file="someFile.log", level=logging.DEBUG )
logger= logging.getLogger( __name__ )
try:
    curl = pycurl.Curl()
    curl.setopt(pycurl.URL, url)
    # etc.
    curl.perform()
    curl.close
    logger.info( "Read %s", url )
except Exception, e:
    logger.exception( e )
    print e, repr(e), e.message, e.args
    raise
logging.shutdown()

Это создаст хороший журнал, содержащий искомую информацию об исключениях.

2 голосов
/ 15 февраля 2009

Можете ли вы перехватить все исключения где-нибудь в главном блоке и использовать sys.exc_info () для получения информации обратного вызова и записать ее в свой файл. exc_info () возвращает не только тип исключения, но и вызывает traceback, поэтому должна быть информация о том, что пошло не так.

...