Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果要停止屈服,生成器函数的返回是否仍然有效?_Python_Python 3.x - Fatal编程技术网

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)