Python:将字符串转换为整数

Ada*_*son 10 python

有没有人可以快速将不安全的字符串转换为int

字符串通常以:'234\r\n'或类似的东西返回.

在这种情况下我想要234.如果'-1\r\n',我想要-1.我从不希望方法失败,但我不想尝试,除了,传递只是为了隐藏错误(万一发生极端事件).

Ale*_*lli 21

在这种情况下你有办法避免try/ except,虽然我不推荐它(假设您的输入字符串已命名s,并且您在一个必须返回的函数中):

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

...在部分else就是你回什么是你想要比如说,如果s'iamnotanumber','23skidoo'空,全空间,等等.

除非很多输入字符串都是非数字,否则try/except更好:

try: return int(s)
except ValueError: ...
Run Code Online (Sandbox Code Playgroud)

你看到简洁的收益,并避免繁琐的字符串操作和测试! - )

我看到很多答案int(s.strip()),但那是超级的:剥离不需要!

>>> int('  23  ')
23
Run Code Online (Sandbox Code Playgroud)

int 知道足以忽略前导和尾随空白本身! - )

  • @dangph,_redundant_操作最好不要做;-). (8认同)
  • 我必须仅仅因为使用"超级反复"这个词而给出这个回答状态 (6认同)
  • 实际上,如果读者知道int的行为(现在我们都知道;-)),那么他就知道程序员的意图了.两次执行某些代码确实是多余的. (2认同)

Lud*_*mer 9

import re
int(re.sub(r'[^\d-]+', '', your_string))
Run Code Online (Sandbox Code Playgroud)

这将删除除数字和" - "符号之外的所有内容.如果您可以确定除了空格之外不会有任何多余的字符,请使用gruszczy的方法.


gru*_*czy 8

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

但是如果传递了一些不是数字的东西,这对你没有帮助.总是把尝试,除了和捕获ValueError.

无论如何,这也有效:int('243\n\r ')所以也许你根本不需要strip.

编辑:

你为什么不编写自己的函数,这将捕获异常并返回一个合理的默认值并放入一些utils模块?