【发布时间】:2019-07-07 21:02:42
【问题描述】:
我正在使用 Python 3.6.3,我遇到了来自 int() 和 isdigit() 的奇怪行为,代码如下:
s = "..... not less than 66²/ 3 % of ......"
total = 0
for c in s:
if c.isdigit():
total += int(c)
ValueError: invalid literal for int() with base 10: '²'
我了解该错误,并且我知道我可以使用try catch 跳过该错误。我的问题是,如果 isdigit() 返回 true,那么 char\string 应该被正确转换,或者 isdigit() 应该返回 false。否则说int()和isdigit()应该是连贯的。
【问题讨论】:
-
实际上,
isdigit被证明可以在这种情况下工作 -
这太令人难以置信了,感觉就像一个错误,但实际上是有道理的。 this 的重复(种类)
-
您为什么会这样认为?如前所述,文档明确说明了其他情况。
-
不知道它是否可行,但从技术上讲,我想您可以使用正则表达式将上标转换为
**n,然后您的算法将更容易实现。甚至只是在上标的情况下使用 pythonic 指数符号。**n -
@juanpa.arrivillaga 我举起手来为表面上采用这种方法而感到内疚。至少对我来说,我很容易觉得我含蓄地知道它做了什么;极端情况是它不适用于
all()等的负数。考虑到快速的投票,我觉得那里有很多代码可能会因为这个而崩溃,无论是否明确记录:P跨度>
标签: python python-3.6