Когда мой процесс завершается, я получаю вывод в stderr, который выглядит так:

  Exception exceptions.TypeError: "'NoneType' object is not callable" in <function <lambda> at 0x5507d70> ignored

Насколько я понимаю, это вызвано исключениями, создаваемыми во время сборки мусора ( del ()?) Или обратным вызовом weakref, который, как я знаю, используется в этом приложении.

Какие есть способы узнать, откуда это исходит?

7
rhettg 23 Июн 2010 в 02:28

2 ответа

Лучший ответ

Проблема здесь не в лямбда-выражениях: лямбда-функции действительно имеют отладочную информацию.

a = lambda: 1
print a.func_code.co_filename
print a.func_code.co_firstlineno

(a.__code__ в python3.)

Проблема заключается в форматировании резервных исключений: он не показывает трассировку стека, в которой обычно отображается эта информация.

Если вы хотите попытаться улучшить это, проблема, похоже, в Python / errors.c, в PyErr_WriteUnraisable (). Я не знаю, есть ли какие-то более глубокие проблемы, затрудняющие это, но подозреваю, что нет. Трассировка должна быть в "tb" после вызова PyErr_Fetch ().

1
Glenn Maynard 23 Июн 2010 в 01:08

Запустите программу Python с параметром -v , чтобы вы могли видеть, в какой момент на последних этапах возникает исключение. Это помогло мне, когда я столкнулся с такой же ситуацией; также с sqlalchemy ...

7
Jurgenfd 16 Июн 2011 в 11:45