gpt4 book ai didi

运行有限或无限生成器函数时出现 Python3 错误

转载 作者:行者123 更新时间:2023-11-28 20:22:00 25 4
gpt4 key购买 nike

我想在 Python3.4 中执行以下有限或无限生成器函数(取决于关键字 terminate 的值):

def generate_integers(begin,  terminate = None):
k = begin
while k<terminate or terminate==None:
yield k
k = k + 1

我通过以下命令运行这个函数:

g = generate_integers(0) 
print(next(g))
print(next(g))

但是,Python 返回以下错误消息:

TypeError: unorderable types: int() < NoneType()

我在解释此错误时遇到问题,因为该函数在两个实例中运行良好,尽管在我看来这些实例与错误消息无关:

  • generate_integers(begin,terminate==None): 函数中仅使用条件表达式 while terminate==None: 时,该函数返回所需的值和没有错误消息。
  • 代码在Python2.7.6中运行良好。

你能解释一下错误信息吗?你有解决问题的想法吗?

最佳答案

将您的测试更改为首先检查是否 terminateNone对象:

while terminate is None or k < terminate:

or短路;如果terminate is None为真,k < terminate 的测试不执行。

您的代码可以在 Python 2 中运行,因为 Python 试图让所有东西都可以订购; None仅在整数之前排序,因为 Python 试图支持排序异构列表。结果证明这是难以跟踪的错误的来源,并且错误在 Python 3 中得到了纠正。

但是请注意,当 terminate = None 时,您的原始代码将不能在 Python 2 上工作作为any_integer < None , 在 Python 2 上总是 False,至少对于 CPython 是这样。语言规范只说明不同类型之间的顺序是稳定的,而不是该顺序应该是什么; Jython和IronPython完全免费排序None 整数之后。

关于运行有限或无限生成器函数时出现 Python3 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25305753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com