2013-04-14 4 views
2

Кажется, что вызов throw на генератор принимает тип исключения. Как мне переустановить экземпляр исключения (который я уже поймал)?Как перестроить исключение генератору

EDIT: Рассмотрим

def g(): 
    try: 
     yield 1 
    except Exception as e: 
     yield 2 

def f(): 
    x = g() 
    print x.next() 
    print x.throw(Exception) 

Но как я могу бросить экземпляр исключением того, что уже существует?

+0

Не могли бы вы объяснить свой вопрос более подробно? Показать какой-нибудь код может быть? На данный момент это не очень понятно. –

+1

У Python нет 'catch'. – millimoose

+0

О да ... Это смущает. Я это исправил. –

ответ

4

Аргументы generator.throw(...) точно отражают аргументы в инструкции raise. Таким образом, это не : - класс исключения; это может быть объект исключения, как с raise.

Это отлично работает:

x.throw(Exception("i'm an argument")) 

документация, по общему признанию, чрезвычайно вводит в заблуждение по этому вопросу. The PEP по крайней мере дает вам подсказку:

Эффект повышения исключение в точности, как если бы заявление:

raise type, value, traceback 

был выполнен в точке подвеса.

+0

Я пробовал и видел, как это сработало ... Я просто не знал, было ли это определено для работы, согласно стандарту –

+0

Более 3 лет спустя, и документы STILL вводят в заблуждение в этом вопросе! Спасибо за этот ответ. –

Смежные вопросы