【发布时间】:2019-11-25 01:24:06
【问题描述】:
对于int 对象,可以使用来自 cpython 的 cimported 函数,如下所示:
%%cython
from decimal import Decimal
from cpython cimport PyLong_Check
val_decimal = Decimal(1)
print(PyLong_Check(val_decimal))
False
但是decimal好像没有对应的功能。
另一种方法是像这样使用try-except:
%%cython
from decimal import Decimal
from cpython cimport PyFloat_Check
cdef bint check(object val):
if PyFloat_Check(val):
return False
try:
float(val)
return True
except:
return False
val_decimal = Decimal(1.1)
val_float = 1.1
print (check(val_decimal))
print (check(val_float))
True
False
但这不仅会捕获decimal,还会捕获可能转换为float 的所有内容。例如。 check("1.1") 也返回 True('str' 可能也被排除在 check() 中,但这看起来只是'解决方法' - 不能保证check() 现在会触发仅 decimal)。
那么在 cython 中检查 decimal 的正确方法是什么?
【问题讨论】: