fab*_*ian 2 python compiler-errors generator python-2.7 python-3.x
我想terminate在Python3.4中执行以下有限或无限生成器函数(取决于关键字的值):
def generate_integers(begin, terminate = None):
k = begin
while k<terminate or terminate==None:
yield k
k = k + 1
Run Code Online (Sandbox Code Playgroud)
我通过以下命令运行此函数:
g = generate_integers(0)
print(next(g))
print(next(g))
Run Code Online (Sandbox Code Playgroud)
但是,Python返回以下错误消息:
TypeError: unorderable types: int() < NoneType()
Run Code Online (Sandbox Code Playgroud)
我在解释此错误时遇到问题,因为该函数在两个实例中运行良好,尽管这些实例在我看来与错误消息无关:
while terminate==None:在generate_integers(begin,terminate==None):函数中使用条件表达式时,该函数返回所需的值,并且不会显示错误消息.你能解释一下错误信息吗?你有解决这个问题的想法吗?
更改您的测试以首先检查是否terminate是None对象:
while terminate is None or k < terminate:
Run Code Online (Sandbox Code Playgroud)
or短路; 如果terminate is None为true,k < terminate则不执行测试.
你的代码在Python 2中工作,因为Python试图使所有东西都可以订购; None仅在整数之前排序,因为Python试图支持排序异构列表.这被证明是难以跟踪的错误的来源,并且在Python 3中纠正了错误.
但是请注意,您的原始代码为此将不会对Python的2工作时,terminate = None如any_integer < None,是总是假的Python 2中,至少CPython的.语言规范只规定不同类型之间的顺序是稳定的,而不是那个顺序应该是什么; Jython和IronPython的是完全免费的排序None 后的整数.