Общий улов для python
У меня очень странное поведение, которое, по-видимому, приводит к молчаливым исключениям. Как я могу написать общий try catch, где я могу отлаживать все исключения. Что-то вроде:
try:
# something that fails
except e:
print e
Немного больше о проблеме:
У меня есть приложение Django, которое на моем компе (Ubuntu Linux 8.10) отлично работает как с помощью runerver, так и с mod-python. На сервере развертывания (Ubunut Linux 8.10) он отлично работает с помощью сервера задач, но с ошибкой через apache в mod-python.
Я уменьшил причину до части приложения, использующего Berkeley DB (bsddb.db) и вторичные ключи. Метод обратного вызова для вторичных ключей использует pickle для форматирования ключей. Он терпит неудачу, когда я вызываю pickle на одно значение. Однако это происходит только при использовании cPickle, и использование pickle на тех же значениях вне функции обратного вызова также работает.
Я просто хочу знать, почему это не с помощью cPickle.
Ответы
Ответ 1
Исключения уже напечатаны по умолчанию перед завершением программы. Если вы хотите отправить ошибку где-нибудь еще (не печатать), вы можете сделать это:
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
модуль трассировки весьма полезен для форматирования трассировки. Затем вы можете записать его в файл журнала.
Ответ 3
Это работает?
except BaseException, e: