Общий улов для питона - PullRequest
       13

Общий улов для питона

68 голосов
/ 14 января 2009

У меня очень странное поведение, которое, похоже, приводит к тихим исключениям. Как я могу написать общую попытку поймать, где я могу отладить все исключения. Что-то вроде:

try:
    # something that fails
except e:
    print e

Немного подробнее о рассматриваемой проблеме:

У меня есть приложение Django, которое на моем компе (Ubuntu Linux 8.10) прекрасно работает как через runserver, так и через mod-python. На сервере развертывания (Ubunut Linux 8.10) он работает нормально через сервер запуска, но завершается с ошибкой через apache в mod-python.

Я сократил причину до части от приложения, которое использует Berkeley DB (bsddb.db) и вторичные ключи. Метод обратного вызова для вторичных ключей использует pickle для форматирования ключей. Сбой, когда я вызываю pickle для одного значения. Тем не менее, это происходит только при использовании cPickle, и использование pickle для тех же значений вне функции обратного вызова также работает.

Я просто хочу знать, почему он не работает с cPickle.

Ответы [ 3 ]

130 голосов
/ 14 января 2009

Исключения уже распечатаны по умолчанию до завершения программы. Если вы хотите отправить ошибку куда-то еще (не печатать ее), вы можете сделать это:

try:
    something()
except Exception as e:
    send_somewhere(traceback.format_exception(*sys.exc_info()))
    raise # reraises the exception

обратите внимание, что этот формат, использующий ключевое слово as, предназначен для python> 2.6. Старый способ был:

except Exception, e:
2 голосов
/ 14 января 2009

Модуль трассировки весьма полезен для форматирования трассировок. Затем вы можете записать его в файл журнала.

1 голос
/ 14 января 2009

Это работает? :

except BaseException, e:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...