我有 var DICTIONARY,它是一个字典,其中键是英文字母,值是以相应字母开头的单词。 DICTIONARY 的初始填充如下所示:
DICTIONARY = {
'a': 'apple',
'b': 'banana',
'c': 'cat',
'd': 'dog',
}
我的代码有 2 个 while 循环,因为更高的 try- except 会结束整个生成器循环:
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
但我没有发现最后一个默认值 - 它是“无”:
default
default
default
None
dog
出了什么问题?
我认为问题在于生成器堆栈在先前的收益函数上。如果您添加更多
next
调用,问题即可解决:
coro = alphabet()
next(coro)
print(coro.send('apple'))
next(coro)
print(coro.send('banana'))
next(coro)
print(coro.throw(KeyError))
next(coro)
print(coro.send('dog'))
next(coro)
print(coro.send('d'))
输出:
default
default
default
default
dog