2014-03-26 17:27:52 +00:00
|
|
|
def gen():
|
|
|
|
try:
|
|
|
|
yield 1
|
|
|
|
except ValueError:
|
|
|
|
print("got ValueError from upstream!")
|
|
|
|
yield "str1"
|
|
|
|
raise TypeError
|
|
|
|
|
|
|
|
def gen2():
|
|
|
|
print((yield from gen()))
|
|
|
|
|
|
|
|
g = gen2()
|
|
|
|
print(next(g))
|
|
|
|
print(g.throw(ValueError))
|
|
|
|
try:
|
|
|
|
print(next(g))
|
|
|
|
except TypeError:
|
|
|
|
print("got TypeError from downstream!")
|
|
|
|
|
2016-12-20 01:57:39 +00:00
|
|
|
# case where generator doesn't intercept the thrown/injected exception
|
|
|
|
def gen3():
|
|
|
|
yield 123
|
|
|
|
yield 456
|
|
|
|
|
|
|
|
g3 = gen3()
|
|
|
|
print(next(g3))
|
|
|
|
try:
|
2018-09-13 14:44:06 +00:00
|
|
|
g3.throw(KeyError)
|
|
|
|
except KeyError:
|
|
|
|
print('got KeyError from downstream!')
|
|
|
|
|
|
|
|
# case where a thrown exception is caught and stops the generator
|
|
|
|
def gen4():
|
|
|
|
try:
|
|
|
|
yield 1
|
|
|
|
yield 2
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
g4 = gen4()
|
|
|
|
print(next(g4))
|
|
|
|
try:
|
|
|
|
g4.throw(ValueError)
|
2016-12-20 01:57:39 +00:00
|
|
|
except StopIteration:
|
2018-09-13 14:44:06 +00:00
|
|
|
print('got StopIteration')
|