有没有人可以快速将不安全的字符串转换为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 知道足以忽略前导和尾随空白本身! - )
import re
int(re.sub(r'[^\d-]+', '', your_string))
Run Code Online (Sandbox Code Playgroud)
这将删除除数字和" - "符号之外的所有内容.如果您可以确定除了空格之外不会有任何多余的字符,请使用gruszczy的方法.
int('243\r\n'.strip())
但是如果传递了一些不是数字的东西,这对你没有帮助.总是把尝试,除了和捕获ValueError.
无论如何,这也有效:int('243\n\r ')所以也许你根本不需要strip.
编辑:
你为什么不编写自己的函数,这将捕获异常并返回一个合理的默认值并放入一些utils模块?