Если раньше интерпретатор подсказывал мне, то после перехвата он пишет только то, что я написал сам¶
In []:
2014-11-29 16:48:58+0300 [scrapy] ERROR: ...does not exist 'req_url1' in c1=item['req_url1']
In []:
# Стала появляться длиннющая строчка:
2014-11-29 16:48:58+0300 [scrapy] INFO: Catch KeyError: from c[1-16] Probably, you switch off some pipe?
Or comment c[...] in pipe_file.py
# В результате работы вот этого кода
except KeyError:
log.msg('Catch KeyError: %s in pipe_to_csvfile.py'% \
'from c[1-16] Probably, you switch off some pipe? \
Or comment c[...]')
Естественно, хочется не терять эту подробную информацию, полезно знать, что перехватил
In []:
#If you really wanted to catch all the errors, you can do the following:
import sys, traceback
def catchEverything():
try:
... some operation(s) ...
except:
exc_type, exc_value, exc_traceback = sys.exc_info()
... exception handling ...
Пробуем сразу сконструировать свой вариант (с учетом материалов до конца поста)¶
In []:
mport sys, traceback
...
...
def .... :
...
try:
... some operation(s) ...
except:
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_exception(exc_type, exc_value, exc_traceback,limit=2, file=sys.stdout)
Этот вариант работает, конкретный пример в следующем посте.
Разберем пример из 28.10.1. Traceback Examples¶
In [1]:
import sys, traceback
def lumberjack():
bright_side_of_death()
def bright_side_of_death():
return tuple()[0]
Здесь у нас стек из двух функций заканчивается вызовом неопределенного кортежа, вот, что выдает наш продвинутый IPython:
In [2]:
lumberjack()
Далее продолжим копировать код из примера, выполним его ... и получим подробный вывод¶
In [3]:
try:
lumberjack()
except IndexError:
exc_type, exc_value, exc_traceback = sys.exc_info()
print "*** print_tb:"
traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
print "*** print_exception:"
traceback.print_exception(exc_type, exc_value, exc_traceback,limit=2, file=sys.stdout)
print "*** print_exc:"
traceback.print_exc()
print "*** format_exc, first and last line:"
formatted_lines = traceback.format_exc().splitlines()
print formatted_lines[0]
print formatted_lines[-1]
print "*** format_exception:"
print repr(traceback.format_exception(exc_type, exc_value,exc_traceback))
print "*** extract_tb:"
print repr(traceback.extract_tb(exc_traceback))
print "*** format_tb:"
print repr(traceback.format_tb(exc_traceback))
print "*** tb_lineno:", exc_traceback.tb_lineno
Далее я было решил поэкспериментировать с методами и параметрами traceback, но распечатал здесь только стек notebook¶
In [4]:
sys.exc_info()
Out[4]:
In [5]:
traceback.print_stack()
Действитеьно, принципиальные вещи ясны, а экспериментировать лучше с конкретным пауком. Результы экспериментов в следующем посте.
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий