【问题标题】:Using isnumeric in both Python2 and 3在 Python2 和 3 中使用 isnumeric
【发布时间】:2021-02-12 13:06:54
【问题描述】:

正在处理具有接收值的函数的应用程序,我正在尝试查看它是intfloat 还是string。在网上做了一些查找后,我发现 isnumeric()isdigit() 涵盖了 int 和 float 两种情况,并且 string 是默认的。

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

嗯,不完全是!因为这个应用程序支持 Python 版本 2.7.153.4.83.5.53.6.6,我了解到 Python 2 isumeric 和 isdigit 适用于 unicode,而 Python 3 适用于字符串。

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

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

【问题讨论】:

  • sys.version ?
  • 如果只是 2.xx 与 3.xx 之间的区别,我更喜欢 sys.version.major
  • @Iron Fist 是的,它有帮助。很高兴看到有一种获取版本的方法,但必须将其很好地插入代码中。为帮助干杯
  • 注意isdigitisnumeric:除了0-9之外,这两个函数也将特殊的Unicode字符视为数字,例如U+2465 CIRCLED DIGIT SIX.. .

标签: python python-3.x python-2.7 python-unicode


【解决方案1】:

首先,您可以在 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

【讨论】:

    【解决方案2】:

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

    if sys.version_info.major == 3:
        # Python 3
        unicode = str
    
    def isnumeric(s):
        return unicode(s).isnumeric()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 2016-11-26
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多