在 Python2 和 3 中使用 isnumeric

问题描述

正在处理一个应用程序,该应用程序具有一个接受值的函数,我正在尝试查看它是 intfloat 还是 string。在网上看了一些之后,我发现 isnumeric()isdigit() 涵盖了 int 和 float 场景,字符串是认的。

太棒了……问题解决了:)

不完全是!因为此应用程序支持 Python 版本 2.7.153.4.83.5.53.6.6,所以我了解到 Python 2 isnumeric 和 isdigit 适用于 unicode,而 Python 3 则适用于字符串。

所以我的 CI 通过了 Python 3 的测试,但没有通过 Python 2 :(

有没有办法检查正在动态运行的 Python 版本并从那里使用函数的正确实现?

解决方法

首先,您也可以在 Python 2.x 中对字符串使用 isalpha()isdigit()。 其次,您可以尝试将变量转换为 floatint,然后查看操作是否引发异常。

for x in ['aa','2.3','4']:
  try:
    x = int(x)
    print x,' is integer'
    continue
  except:
    pass    

  try:
    x = float(x)
    print x,'is float'
    continue
  except:
    pass

  print x,'is string'



aa is string
2.3 is float
4  is integer
,

为了方便 unicode 方法的跨版本移植,您需要在 Python 3 上将 unicode 设置为 str 的别名。

if sys.version_info.major == 3:
    # Python 3
    unicode = str

def isnumeric(s):
    return unicode(s).isnumeric()