Найдите имя модуля инициирующего исключения в Python

У Вас может также быть свой возврат запроса время как метка времени Unix. Это избавилось бы от потребности назвать strtotime() и сделать вещи немного менее интенсивными на стороне PHP...

select  UNIX_TIMESTAMP(timsstamp) as unixtime from the_table where id = 1234;

Тогда в PHP просто используют эти date() функция для форматирования его, какой бы ни путь Вы хотели бы.

unixtime);
?>

или

unixtime);
?>

мне нравится этот подход в противоположность использованию функция MySQL DATE_FORMAT, потому что это позволяет Вам снова использовать тот же запрос для захвата данных и позволяет Вам изменять форматирование в PHP.

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

9
задан Reinstate Monica 8 July 2009 в 00:55
поделиться

5 ответов

Вы можете использовать модуль трассировки вместе с sys.exc_info () , чтобы получить обратную трассировку программным способом:

try:
    myapp.foo.doSomething()
except Exception, e:
    exc_type, exc_value, exc_tb = sys.exc_info()
    filename, line_num, func_name, text = traceback.extract_tb(exc_tb)[-1]
    print 'Thrown from: %s' % filename
7
ответ дан 4 December 2019 в 11:43
поделиться

Это должно сработать:

import inspect

try:
    some_bad_code()
except Exception, e:
    frm = inspect.trace()[-1]
    mod = inspect.getmodule(frm[0])
    print 'Thrown from', mod.__name__

РЕДАКТИРОВАТЬ: Stephan202 упоминает угловой случай . В этом случае, я думаю, мы могли бы использовать имя файла по умолчанию.

import inspect

try:
    import bad_module
except Exception, e:
    frm = inspect.trace()[-1]
    mod = inspect.getmodule(frm[0])
    modname = mod.__name__ if mod else frm[1]
    print 'Thrown from', modname

Проблема в том, что если модуль не загружается (из-за того, что при чтении кода в этом файле возникло исключение), то проверяет Вызов .getmodule не возвращает None. Итак, мы просто используем имя файла, на который ссылается фрейм-нарушитель. (Спасибо за указание на это, Stephan202!)

11
ответ дан 4 December 2019 в 11:43
поделиться

Пакет протоколирования Python уже поддерживает это - проверьте документацию . Вам просто нужно указать % (module) s в строке формата. Тем не менее, это дает вам модуль, в котором исключение было перехвачено - не обязательно то же самое, что было сгенерировано . Отслеживание, конечно же, дает вам точное место, где возникло исключение.

0
ответ дан 4 December 2019 в 11:43
поделиться

Это должно помочь:

import inspect
def modname():
    t=inspect.trace()
    if t:
        return t[-1][1]
0
ответ дан 4 December 2019 в 11:43
поделиться

У меня есть история о том, как CrashKit вычисляет имена классов и имена пакетов из трассировки стека Python в блоге компании: « Сага трассировки стека Python ». Включен рабочий код.

0
ответ дан 4 December 2019 в 11:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: