我有一小段这样的代码:
recvfrom
令人惊讶的是,该打印从未执行。
Numba表示支持math.isnan:https://numba.pydata.org/numba-doc/latest/developer/autogen_math_listing.html#math.isnan
因此,我尝试使用@njit
def looptest():
value0 = np.NaN
while math.isnan(value0):
print('Nan 2: ', math.isnan(value0))
break
,据说它也受支持。结果相同:循环永远不会执行,只有在用Numba编译时才执行。如果我禁用JIT编译,则可以正常打印。
然后我添加了一些调试信息:
cmath
我发现,即使使用Numba进行编译,@njit
def looptest():
value0 = np.NaN
print('Nan 1: ', cmath.isnan(value0))
print(value0)
while cmath.isnan(value0):
print('Nan 2: ', cmath.isnan(value0))
break
似乎也可以正确解析为True:
isnan
但是,令我惊讶的是,使用Numba编译时,while循环内的第二个打印不执行。
我尝试使用Nan 1: True
nan
和NUMBA_OPT=1
减少优化-结果相同。
这是怎么回事?如何编写此代码,以便无论是否使用Numba编译,while循环都将执行相同的代码?