Python 如果要停止屈服,生成器函数的返回是否仍然有效?
假设我有这个密码:Python 如果要停止屈服,生成器函数的返回是否仍然有效?,python,python-3.x,Python,Python 3.x,假设我有这个密码: def yield_values(): if do_something(): yield 1 yield 2 if not do_something_bad(): yield 3 return yield 4 def do_something(): return True def do_something_bad(): return False if __nam
def yield_values():
if do_something():
yield 1
yield 2
if not do_something_bad():
yield 3
return
yield 4
def do_something():
return True
def do_something_bad():
return False
if __name__ == '__main__':
function_gen = yield_values()
print(next(function_gen))
print(next(function_gen))
print(next(function_gen))
他们说在生成函数中混合收益和收益是个坏主意。但在我的用例中,如果做了坏事,就会返回False。。我想让出3,然后退出,这样4就不会再让出了
这是完全合法的还是我应该用另一种方式
更新:添加了try/except
def yield_values():
if do_something():
yield 1
yield 2
if not do_something_bad():
yield 3
return "something"
yield 4
def do_something():
return True
def do_something_bad():
return False
if __name__ == '__main__':
try:
function_gen = yield_values()
print(next(function_gen))
print(next(function_gen))
print(next(function_gen))
print(next(function_gen))
except StopIteration as err:
print("Error : ".format(err.value))
1
2
3
Error :
根据法律规定,这是绝对合法的:
在生成器函数中,return语句表示
生成器已完成,并将引发StopIteration。这个
返回值(如果有)用作构造的参数
StopIteration并成为StopIteration.value属性
试图围绕try和except进行包装,但StopIteration.value始终不返回任何值,即使我显式添加return“something”@MarkEstrada似乎是一个完全无关的问题,您到底在使用什么代码来捕获异常>如果我在您发布的代码中放入
return“something”
,则错误会出现“something”
作为.value
我将整个主函数包装在try中,除了Stopiteration。。。并尝试打印。请查看我问题上方添加的信息。我明确地设置了返回“something”@MarkEstrada你是否用StopIteration.value解决了这个问题
我阅读了评论,希望@juanpa.arrivillaga能给你提供完整的帮助OK谢谢..我只是在一些随机的谷歌点击中读到了它,可能是我遇到的。我仍在探索Python,因此我只是尝试收集有关我正在阅读的内容的尽可能多的信息。您编写的代码将有None
。你必须return
也试过了,伙计。我无法重现。您使用的是哪一版本的Python?这是因为您的格式字符串已损坏,“Error:”.format(err.value)
应该类似于“Error:{}”。format(err.value)