У меня очень странное поведение, которое, кажется, приводит к тихим исключениям. Как я могу написать общую попытку, в которой я могу отлаживать все исключения. Что-то вроде:
try:
# something that fails
except e:
print e
Еще немного о проблеме в деталях:
У меня есть приложение Django, которое на моем компьютере (Ubuntu Linux 8.10) отлично работает как через runserver, так и через mod-python. На сервере развертывания (Ubuntu Linux 8.10) он отлично работает через runserver, но не работает через apache в mod-python.
Я сократил причину до части приложения, которое использует Berkeley DB (bsddb.db) и вторичные ключи. Метод обратного вызова для вторичных ключей использует pickle для форматирования ключей. Это не удается, когда я вызываю pickle для одного значения. Однако это не удается только тогда, когда я использую cPickle, и использование pickle для тех же значений вне функции обратного вызова также работает.
Я просто хочу знать, почему он не работает с cPickle.






Это работает? :
except BaseException, e:
модуль трассировки весьма полезен для форматирования трассировок. Затем вы можете записать это в файл журнала.
По умолчанию исключения уже печатаются перед завершением программы. Если вы хотите отправить ошибку в другое место (не распечатывать), вы можете сделать это:
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:
не знал об изменении "Exception as e". "Exception, e" всегда меня беспокоило, приятно видеть, что его убрали.
Ключевое слово as предназначено для python> = 2.6
Такое простое решение. Тем не менее, я гулю его раз в два месяца, нажимаю на верхнюю ссылку и оказываюсь здесь.
Не стоит ловить
BaseException- он включает в себяSystemExitиKeyboardInterrupt, то, что вы обычно не хотите ловить.