首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用空格从字符串解析int的方法因py2而异于py3

使用空格从字符串解析int的方法因py2而异于py3
EN

Stack Overflow用户
提问于 2017-10-17 10:10:05
回答 3查看 162关注 0票数 1

使用空格到整数的字符串解析从Python2更改为Python3。

在Python2中,它是:

代码语言:javascript
复制
>>> int('-11')
-11
>>> int('- 11')
-11

而在Python3中:

代码语言:javascript
复制
>>> int('-11')
-11
>>> int('- 11')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '- 11'

一旦我弄明白了这一点,我就试图在文档中找到一些关于这个变化的解释,但什么也找不到。

因此,我的问题是:如何修改代码以从py2迁移到py3?i = int(s.replace(' ',''))是该走的路吗?还是有更好的建议?有什么我没发现的变化吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-17 10:32:15

为了响应第1779期,在Python3中显式地更改了这一点。

我发现,当将字符串转换为int或float时,int转换允许符号后面的空格,而浮点转换不允许,我认为它们应该是一致的。

3.0a3变化量g中已经注意到了这一点(在发行编号中有一个错误):

  • 问题1769:现在不允许使用int("- 1")了。

允许空格与其他数值转换不一致。

解决这个问题的最快方法是使用str.replace(),是的:

代码语言:javascript
复制
>>> import timeit
>>> timeit.timeit('int("- 1".replace(" ", ""))')
0.37510599600500427
>>> timeit.timeit('int("- 1".translate(map))', 'map = {32: None}')
0.45536769900354557
>>> timeit.timeit('literal_eval("- 1")', 'from ast import literal_eval')
6.255796805999125
>>> timeit.timeit('int(extract("- 1"))', 'import re; from functools import partial; extract = partial(re.compile(r"[^\d\.\-]").sub, "")')
0.7367695900029503

通过支持Python3文档,Python2.7文档在事实之后更新。它现在明确指出,符号和数字之间不应该有空格。因此,在官方上,空格不再受支持,但为了不破坏向后兼容性,错误被保留在其中。

票数 4
EN

Stack Overflow用户

发布于 2017-10-17 10:23:02

在Python 3中,字符串文本中的空白空间似乎不会被丢弃,但是,Python解析器仍然忽略了在数字文本中发现的空白:

代码语言:javascript
复制
>>> e = -   11
>>> e
-11

因此,您可以在Python2和3中的输入字符串上直接使用ast.literal_eval,因此不考虑空格:

代码语言:javascript
复制
>>> import ast
>>> ast.literal_eval('-      11 ')
-11
票数 2
EN

Stack Overflow用户

发布于 2017-10-17 10:27:39

而不需要重新发明轮子。PY2 && PY3

代码语言:javascript
复制
import re
int(re.sub(r'[^\d\-]', '', '- 11'))

测试

代码语言:javascript
复制
>>> int(re.sub(r'[^\d\.\-]', '', '- 11'))
-11
>>> int(re.sub(r'[^\d\.\-]', '', '+ 11'))
11
>>> int(re.sub(r'[^\d\.\-]', '', '+ 11easd'))
11
>>> int(re.sub(r'[^\d\.\-]', '', '+ 11easd3325'))
113325
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46787648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档