Python:将字符串转换为整数

11 投票
8 回答
51035 浏览
提问于 2025-04-15 20:48

有没有人能简单说一下怎么把一个不安全的字符串转换成一个 int 呢?

这个字符串通常是这样的: '234\r\n' 或者类似的东西。

在这种情况下,我想要 234。如果是 '-1\r\n',我想要 -1。我希望这个方法永远不会失败,但我也不想为了掩盖错误而使用 try、except、pass 这种方式(以防发生极端情况)。

8 个回答

8

int('243\r\n'.strip())

但是,如果传入的不是数字,这样做也没用。记得要用try和except来处理可能出现的ValueError错误。

不过,这样也可以:int('243\n\r '),所以你可能根本不需要用strip

编辑:

为什么不自己写一个函数,来处理这个错误,并返回一个合理的默认值,然后放到一些工具模块里呢?

10
import re
int(re.sub(r'[^\d-]+', '', your_string))

这段代码会去掉除了数字和“-”符号以外的所有东西。如果你能确定除了空格之外不会有多余的字符,那就可以用gruszczy的方法。

25

在这种情况下,你确实可以避免使用 try/except,不过我不太推荐这样做(假设你的输入字符串叫 s,并且你在一个必须返回值的函数里):

xs = s.strip()
if xs[0:1] in '+-': xs = xs[1:]
if xs.isdigit(): return int(s)
else: ...

else 里的 ... 部分是你可以返回你想要的内容的地方,比如说,如果 s'iamnotanumber''23skidoo'、空字符串、全是空格,或者类似的情况。

除非你的输入字符串中有很多不是数字的情况,否则使用 try/except 更好:

try: return int(s)
except ValueError: ...

这样可以让代码更简洁,也避免了麻烦的字符串处理和测试!-)

我看到很多答案都用 int(s.strip()),但这其实是多余的:去掉空格并不是必须的!

>>> int('  23  ')
23

int 本身就能自动忽略前后的空格!-)

撰写回答