Как получить исходный номер строки из объекта генератора Python? - PullRequest
2 голосов
/ 26 октября 2010

Вот пример:

def g():
  yield str('123')
  yield int(123)
  yield str('123')

o = g()

while True:
  v = o.next()
  if isinstance( v, str ):
    print 'Many thanks to our generator...'
  else:
    # Or GOD! I don't know what to do with this type
    raise TypeError( '%s:%d Unknown yield value type %s.' % \
                     (g.__filename__(), g.__lineno__(), type(v) )
                   )

Как получить имя исходного файла и точный номер строки доходности, когда мой генератор возвращает неизвестный тип (int в этом примере)?

Ответы [ 2 ]

7 голосов
/ 26 октября 2010

Ваш генератор объекта "о" в этом случае имеет всю информацию, которую вы хотите. Вы можете вставить свой пример в консоль Python и проверить с помощью dir как функцию "g", так и генератор "o".

Генератор имеет атрибуты "gi_code" и "gi_frame", которые содержат информацию, которую вы хотите:

>>> o.gi_code.co_filename
'<stdin>'
# this is the line number inside the file:
>>> o.gi_code.co_firstlineno
1
# and this is the current line number inside the function:
>>> o.gi_frame.f_lineno
3
0 голосов
/ 26 октября 2010

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

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