Я читаю python do c https://docs.python.org/3/reference/expressions.html о generator.close()
.
Мой перевод документации:
generator.close ()
Повышает GeneratorExit
в точке, где была приостановлена функция генератора.
Если функция генератора затем корректно завершается:
1.1 уже закрыт,
1.2 или повышает GeneratorExit
(не перехватывая исключение),
close
возвращается к своему абоненту.
Если генератор выдает значение, RuntimeError
повышается.
Если генератор вызывает любое другое исключение, оно передается вызывающей стороне.
close()
ничего не делает, если генератор уже вышел из-за исключения или нормального выхода.
Я не понимаю, как close()
поведение соответствует документации.
>>> def echo(value=None):
... print("Execution starts when 'next()' is called for the first time.")
... try:
... while True:
... try:
... value = (yield value)
... except Exception as e:
... value = e
... finally:
... print("Don't forget to clean up when 'close()' is called.")
...
>>> generator = echo(1)
>>> generator.close()
Don't forget to clean up when 'close()' is called.
Какое правило применяется к generator.close()
? Я в замешательстве.
Мое понимание:
generator.close()
повышение GeneratorExit
исключение GeneratorExit
отслеживается except Exception as e:
и l oop продолжает value = (yield value)
выполняет - в соответствии с правилом 2 выше,
RuntimeError
будет повышено.
Но это не Кажется, не так.
Пожалуйста, скажите мне, что происходит внутри.