@zlodiak

Почему не срабатывает декоратор?

Помогите пожалуйста отремонтировать скрипт.

Есть простейшая корутина. Я попытался написать к ней декоратор, который производит её инициализацию(то есть прогоняет до первого yield)

#!/usr/bin/env python3

from inspect import getgeneratorstate

def coroutine(func):
  def inner(*args, **kwargs):
    g = func(*args, **kwargs)
    g.send(None)
  return inner

@coroutine
def average():
  count = 0
  summ = 0
  average = None
  print('init')

  while True:
    try:
      x = yield average
    except StopIteration:
      print('Done')
    else:
      count += 1
      summ += x
      average = round(summ / count, 2)


g = average()
print(getgeneratorstate(g))


Проблема в том, что у меня не получается вывести состояние генератора, которое обычно можно получать при помощи модуля getgeneratorstate. Сообщение об ошибке такое:
kalinin@lenovo ~/python/hello $ ./hello.py
init
Traceback (most recent call last):
File "./hello.py", line 30, in
print(getgeneratorstate(g))
File "/usr/lib/python3.5/inspect.py", line 1579, in getgeneratorstate
if generator.gi_running:
AttributeError: 'NoneType' object has no attribute 'gi_running'


LIVE DEMO здесь
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы