Регистрация ошибок Python - PullRequest
       5

Регистрация ошибок Python

3 голосов
/ 09 февраля 2011

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

Я пытался сделать это, написав оболочку для интерпретатора Python с помощью модуля подпроцесса. По сути, он запускает интерпретатор python, захватывает любые выходные данные, анализирует и сохраняет их в файл, печатает выходные данные и использует matplotlib для создания некоторых сводных цифр. Однако у меня возникла проблема с получением вывода из моего сценария оболочки в режиме реального времени. Например, если я запускаю скрипт:

import os  
import time

for x in range(10):  
    print "testing"  
    time.sleep(10)  

и я использую subprocess.Popen () с p.communicate (), оболочка будет ждать 100 секунд, а затем печатать все выходные данные. Мне бы хотелось, чтобы оболочка была как можно более невидимой - в идеале в этом случае она будет печатать «тестирование» каждые десять секунд.

Если бы кто-то мог указать мне на хороший способ сделать это, я был бы очень признателен.

Спасибо!

1 Ответ

6 голосов
/ 09 февраля 2011

Полагаю, вы можете просто заменить sys.excepthook своей собственной функцией. Вы можете прочитать об этом в документации Python .

По сути, это позволяет вам настроить то, что происходит, когда исключение просачивается до момента, когда интерпретатор Python завершает работу. Вы используете это так:

import sys

def my_excepthook(type, value, tb):
    # you can log the exception to a file here
    print 'In My Exception Handler'

    # the following line does the default (prints it to err)
    sys.__excepthook__(type, value, tb)

sys.excepthook = my_excepthook

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

...