Python:将字符串转换为整数
有没有人能简单说一下怎么把一个不安全的字符串转换成一个 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
本身就能自动忽略前后的空格!-)