知行编程网知行编程网  2022-11-05 10:00 知行编程网 隐藏边栏  15 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python生成器调用方法引发异常的相关知识,包括python捕获异常,以及python自定义函数报错未定义这些编程知识,希望对大家有参考作用。

python生成器调用方法抛出异常


(推荐操作系统:windows7系统、Python 3.9.1、DELL G3电脑。)

请注意,在生成器已经执行时调用下面的任何生成器方法都会引发 ValueError 异常。


1、__next__

从最后一个 yield 语句开始执行生成器或继续执行。使用该方法继续时(注意是继续而不是第一次执行),当前yield的返回值为None,yield语句后的表达式结果直到下一次yield才会返回给调用者语句被执行。经过。迭代器结束时会引发 StopIteration 异常。

该方法会被 for 以及内置函数 next 隐式的调用。


2、send

继续执行生成器(注意是继续,而不是第一次执行),并向生成器函数发送一个值。 send方法的参数是下一个yield语句的返回值,前提是它传递的参数是提前在yield语句中接收到的。如果这个方法用于启动(即第一次执行)生成器,它必须使用 None 作为它的参数,因为还没有 yield 能够接收到它的值(毕竟接收到值的语句还没有开始执行)。

def fn():
    a = 0
    while True:
        a += 1
        r = yield # r 就是接收 send 参数的变量
        print('{} => {}'.format(a, r))
 
>>> f = fn()
>>> f.send('a') # 不传递 None 的后果
Traceback (most recent call last):
  File "/opt/python3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2910, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-31-6f758a7cad28>", line 1, in <module>
    f.send('a')
TypeError: can't send non-None value to a just-started generator
>>> next(f) # 也可以不传递 None 而是使用 next 执行,两种方式都可以
>>> f.send('a')
1 => a
>>> f.send('b')
2 => b

以上就是python生成器调用方法引发异常,希望能对大家有所帮助。

更多Python学习指路


:

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享