繁体   English   中英

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

[英]Python3 error when running a finite or infinite generator function

我想在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()

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

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

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

更改测试以首先检查terminate是否为None对象:

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进行排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM