【发布时间】:2018-02-07 01:08:00
【问题描述】:
我有一个函数应该返回一个整数元组或 np.nan。
return tuple(int(round(n)) if n is not np.nan else n for n in r)
代码对我来说看起来不错,但我收到以下错误,我不知道出了什么问题。
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-7-368ab2ecd3f3> in <module>()
6 warnings.filterwarnings("ignore") #ignore numpy warnings
7 for k,v in bb_mapping.items():
----> 8 print(k, map_overview(v))
<ipython-input-2-6f1dc6e291ee> in map_overview(map_tuples)
120
121 r = (np.mean(bb_len), np.std(bb_len), np.mean(ins_len), np.std(ins_len))
--> 122 return tuple(int(round(n)) if n is not np.nan else n for n in r)
123
124 def print_sbar(n,m,s='|#.|',size=30,message=''):
<ipython-input-2-6f1dc6e291ee> in <genexpr>(.0)
120
121 r = (np.mean(bb_len), np.std(bb_len), np.mean(ins_len), np.std(ins_len))
--> 122 return tuple(int(round(n)) if n is not np.nan else n for n in r)
123
124 def print_sbar(n,m,s='|#.|',size=30,message=''):
ValueError: cannot convert float NaN to integer
如果我在将 np.nan 值转换为整数之前显式检查它们,我怎么会得到这个错误?
很奇怪,如果我手动检查返回码,列表解析会按预期工作:
>>> print(tuple(int(round(n)) if n is not np.nan else n for n in [12.6,np.nan,0.5,4.6]))
(13, nan, 0, 5)
我在这里错过了什么?
【问题讨论】:
标签: python-3.x list-comprehension nan