Странное исключение с Python's cgitb и inspect.py - PullRequest
0 голосов
/ 02 октября 2011

У меня есть функция, которая декодирует исключение и передает информацию в файл. Вот что я делаю в основном:

exc_info = sys.exc_info
txt = cgitb.text(exc_info)

Используя это, я получил следующую трассировку исключений:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\job_queue\utils\start_workers.py", line 40, in start_worker
  worker_loop(r_jq, worktype, worker_id)
File "C:\Python27\lib\site-packages\job_queue\server\jq_worker.py", line 55, in worker_loop     
  _job_machine(*job)
File "C:\Python27\lib\site-packages\job_queue\server\jq_worker.py", line 34, in _job_machine
  do_verbose_exception()
File "C:\Python27\lib\site-packages\job_queue\server\errors.py", line 23, in do_verbose_exception
  txt = cgitb.text(exc_info)
File "C:\Python27\lib\cgitb.py", line 214, in text
  formatvalue=lambda value: '=' + pydoc.text.repr(value))
File "C:\Python27\lib\inspect.py", line 885, in formatargvalues
  specs.append(strseq(args[i], convert, join))
File "C:\Python27\lib\inspect.py", line 840, in strseq
  return convert(object)
File "C:\Python27\lib\inspect.py", line 882, in convert
  return formatarg(name) + formatvalue(locals[name])
KeyError: 'connection'

Я запустил код несколько раз после этого исключения, но не смог воспроизвести его. Однако в файлах cgitb.py или inspect.py я не нашел ссылки на файл с ключом соединения.

Кто-нибудь узнает, если это проблема cgitb или проверки файлов в python? Любые полезные материалы?

Ответы [ 2 ]

1 голос
/ 11 октября 2011

Вы передали неправильный тип текстовой функции ниже, это правильный путь.

cgitb.text ((sys.last_type, sys.last_value, sys.last_traceback))

0 голосов
/ 02 октября 2011

Я не совсем уверен, почему происходит это исключение, но вы читали документы для модуля cgitb?Кажется, что с python 2.2 он поддерживает запись исключений в файл: http://docs.python.org/library/cgitb.html

Возможно что-то вроде: cgitb.enable (0, "/ my / log / directory") # или 1, если вы хотитеувидеть его в браузере

Что касается вашего фактического отслеживания, вы уверены, что «соединение» - это не имя, которое вы используете в своем собственном коде?Модуль 'inspect', скорее всего, пытается проверить ваш собственный код для создания информации трассировки cgi и где-нибудь получить неверный ключ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...