代码之家  ›  专栏  ›  技术社区  ›  JL Peyret

python 3中的模块级string.upper函数在哪里?

  •  0
  • JL Peyret  · 技术社区  · 6 年前

    如何使此代码在3中工作?

    请注意,我不是在问 "foo".upper() 在字符串实例级别。

    import string
    try:
        print("string module, upper function:")
        print(string.upper)
        foo = string.upper("Foo")
        print("foo:%s" % (foo))
    except (Exception,) as e:
        raise
    

    输出在2上:

    string module, upper function:
    <function upper at 0x10baad848>
    foo:FOO
    

    输出在3上:

    string module, upper function:
    Traceback (most recent call last):
      File "dummytst223.py", line 70, in <module>
        test_string_upper()
      File "dummytst223.py", line 63, in test_string_upper
        print(string.upper)
    AttributeError: module 'string' has no attribute 'upper'
    

    help(string) 也不是很有帮助。据我所知,唯一剩下的功能是 string.capwords .

    注意:有点老土,但这里有一个我的短期解决方案。

    import string
    
    try:
        _ = string.upper
    except (AttributeError,) as e:
        def upper(s):
            return s.upper()
        string.upper = upper
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   David Maze    6 年前

    所有的 string 您描述的模块级函数在python 3中被删除。这个 Python 2 string module documentation 包含此注释:

    您应该将这些函数视为不推荐使用的函数,尽管它们在Python3之前不会被删除。

    如果你有 string.upper(foo) 在Python2中,需要将其转换为 foo.upper() 在Python 3中。

    推荐文章