Как поймать throw и другие исключения в сопрограмме с 1 выходом?Python

Программы на Python
Ответить
Anonymous
 Как поймать throw и другие исключения в сопрограмме с 1 выходом?

Сообщение Anonymous »

У меня есть var DICTIONARY — словарь, в котором ключами являются английские буквы, а значениями — слова, начинающиеся с соответствующей буквы. Первоначальное наполнение СЛОВАРА выглядит так:

Код: Выделить всё

DICTIONARY = {
'a': 'apple',
'b': 'banana',
'c': 'cat',
'd': 'dog',
}
В моем коде есть 2 цикла while, поскольку более высокий метод try-Exception завершит весь цикл генератора:

Код: Выделить всё

def alphabet():
while True:
try:
letter = yield  #waiting for first input from send
while True:
try:
letter = yield DICTIONARY[letter]
except KeyError:
letter = yield 'default'  # return 'default', if key is not found
except Exception:
letter = yield 'default'
except KeyError:
letter = yield 'default'
except Exception:
letter = yield 'default'
Однако для ввода:

Код: Выделить всё

coro = alphabet()
next(coro)
print(coro.send('apple'))
print(coro.send('banana'))
print(coro.throw(KeyError))
print(coro.send('dog'))
print(coro.send('d'))
ожидаемый результат:

Код: Выделить всё

default
default
default
default
dog
Но я не улавливаю последнее значение по умолчанию — оно None:

Код: Выделить всё

default
default
default
None
dog
Что не так?


Подробнее здесь: https://stackoverflow.com/questions/790 ... th-1-yield
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»