2012-05-17 2 views
1

Возможно ли зарегистрировать собственный обработчик ошибок в python - например, http://php.net/set_error_handler в PHP? Я хотел бы запускать ошибки из любого места в моем коде, а затем получать уведомления по электронной почте (и вести журнал и все, что мне нужно, чтобы реализовать в обработчике). Я использовал такой шаблон в PHP.Обработчик ошибок в python

Возможно, я не понимаю концепцию python (так как я новичок в python). Спасибо за помощь.

+1

Обсуждали ли вы использование обработчика исключений? http://docs.python.org/tutorial/errors.html#handling-exceptions –

+0

взгляните на это - http://stackoverflow.com/questions/1319615/proper-way-to-declare-custom-exceptions- in-modern-python – Neil

+0

@Maria Zverina: цель состоит в том, чтобы избежать больших конструкций - просто вызвать ошибку, и все остальное будет выполнено с помощью моего пользовательского обработчика (отправлять уведомления, добавлять журналы и т. д.) Похоже, советы Neil были бы полезны – Serge

ответ

2

Не зная точно, что обработчики ошибок в PHP я буду смотреть на это с точки питона зрения

В Python мы имеем исключения, они по имени исключительным. Мы бросаем исключения, когда что-то идет не так, или мы ожидаем чего-то другого или даже просто хотим потерпеть неудачу. Исключения могут быть брошены в любой момент, а потом поймали, например

a = 'int' 
b = int(a) 

будет сгенерировано исключение, потому что вы не можете преобразовать «Int» на междунар, так что теперь, чтобы сделать это с помощью обработки исключения

try: 
    b = int("int") 
except ValueError: 
    print "can't do that" 

Теперь вы заметите, что мы глотать исключение и продолжить выполнение программы, это не всегда лучшая идея, иногда мы могли бы поднять свое собственное исключение и врезаться

class NotADecimalNumber(Exception): pass 
try: 
    b = int("a") 
except ValueError: 
    raise NotADecimalNumber("'a' is not a decimal number idiot.") 

Теперь мы получаем наше обычное исключение с настраиваемым сообщением

+0

s/не является числом/не является десятичным числом/:-) – jimw

+0

Отредактировано для отражения –

Смежные вопросы