2013-12-14 2 views
0

Я использую следующий код:Получить более подробную возвращение ошибки TrackBack (ошибка + данные)

import traceback 
errors = open('ERROR(S).txt', 'a') 
try: 
    execfile("testing.py", {}) 
except Exception: 
    errors.write(traceback.format_exc() + '\n') 
    errors.write("\n") 
errors.close() 

Например, я мог бы получить

Traceback (most recent call last): 
    File "C:\starter.py", line 87, in execute_subscripts 
    execfile("test.py", {}) 
    File "test.py", line 85, in <module> 
    JSONDATA = json.loads(JSONDATA) 
    File "C:\Python27\lib\json\__init__.py", line 338, in loads 
    return _default_decoder.decode(s) 
    File "C:\Python27\lib\json\decoder.py", line 365, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "C:\Python27\lib\json\decoder.py", line 383, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 

Как я могу также сделать его извлечения данные внутри переменной JSONDATA, а также эту трассировку?

ответ

1

Вы можете просто использовать logging библиотеки и регистрируют JSONDATA либо стандартный вывод с logging.StreamHandler или в файл с logging.FileHandler.

Пример:

l = logging.getLogger("test") 
l.addHandler(logging.StreamHandler()) 
l.setLevel(logging.DEBUG) 
... 
l.debug("JSON DATA: %s", JSONDATA) 
... 

Я думаю, что это правильный способ, чтобы выяснить, что пошло не так. (В качестве альтернативы вы можете использовать простой print или, если хотите вдаваться в детали, используйте pdb)

+0

Подробнее о библиотеке 'logging' можно прочитать здесь: http://docs.python.org/2/library/logging.html –

+1

'logger.exception()' также регистрирует полную трассировку. –

+0

@ChirilaAlexandru Не знаете, как реализовать это в моем фактическом коде ... Я хочу, чтобы данные json регистрировались, если возникает ошибка, если не нужно ее регистрировать. – Ryflex

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