gpt4 book ai didi

python-3.x - 如何在 python3 中找到 string.atol 的兼容替代品

转载 作者:行者123 更新时间:2023-12-01 02:08:37 25 4
gpt4 key购买 nike

我正在尝试使我的 python2.x-Code 与 2.7 和 3.x 兼容。目前我被困在 Pmw.py 中的一些代码(来自 python megawidgets)。看看这本词典的前三个词条:

_standardValidators = {
'numeric' : (numericvalidator, string.atol),
'integer' : (integervalidator, string.atol),
'hexadecimal' : (hexadecimalvalidator, lambda s: string.atol(s, 16)),
'real' : (realvalidator, Pmw.stringtoreal),
'alphabetic' : (alphabeticvalidator, len),
'alphanumeric' : (alphanumericvalidator, len),
'time' : (timevalidator, Pmw.timestringtoseconds),
'date' : (datevalidator, Pmw.datestringtojdn),
}

前两个条目包含“string.atol”。我的问题是:

  1. 在 python 文档中,atol 是作为一个函数 ( string.atol(s[, base]) ) 引入的,所以应该有括号,这里没有括号。那么如何理解这个语法呢?

  2. 在 python 3.2 中,此代码引发错误:

    'numeric'      : (numericvalidator,      string.atol),
    AttributeError: 'module' object has no attribute 'atol'

    我已经尝试用 long 替换三个出现的“atol”,就像 python 文档中建议的那样,但这只是引发了错误:

    'numeric'      : (numericvalidator,      string.long),
    AttributeError: 'module' object has no attribute 'long'

    由于我什至不了解语法,所以我对接下来要尝试什么感到很无助。如何修复这段代码,使其在 python 2.7 和 3.x 中都能正常工作?

希望你能在这方面帮助我。

最佳答案

1: string.atol 是函数本身:函数是python 中的一流对象。括号仅用于调用。

>>> import string
>>> string.atol
<function atol at 0x00B29AB0>
>>> string.atol("aab2", 16)
43698L

2:我想你一定是看错了。 long 不存在于字符串中,但无论如何 Python 3 中没有 long。这是 Python 以可以从用户空间看到的方式区分小整数和长整数时的遗留问题。 (就是上面43698L最后的“L”的意思。)

只需使用 int,即

'numeric': (numericvalidator, int),

关于python-3.x - 如何在 python3 中找到 string.atol 的兼容替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9040027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com