是否有人可以快速将不安全的字符串转换为int
?
该字符串通常以:'234\r\n'
或类似的内容返回。
在这种情况下,我想要234
。如果'-1\r\n'
,我想要-1
。我从不希望方法失败,但我不想尝试,除了,传递只是为了隐藏错误(万一发生极端事件)。
答案 0 :(得分:21)
在这种情况下,你确实有办法避免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'
为空,全空间等。
除非很多输入字符串都是非数字,否则尝试/ except更好:
try: return int(s)
except ValueError: ...
你看到简洁的收益,并避免繁琐的字符串操作和测试! - )
我看到很多答案int(s.strip())
,但那是超级的:不需要剥离!
>>> int(' 23 ')
23
int
知道足以忽略前导和尾随空格本身! - )
答案 1 :(得分:9)
import re
int(re.sub(r'[^\d-]+', '', your_string))
这将删除除数字和“ - ”符号之外的所有内容。如果您可以确定除了空格之外不会有任何多余的字符,请使用gruszczy的方法。
答案 2 :(得分:8)
int('243\r\n'.strip())
但如果传递的不是数字,那对你没有帮助。总是把try,除了并抓住ValueError
。
无论如何,这也有效:int('243\n\r ')
,所以也许你甚至不需要strip
。
修改强>:
为什么不编写自己的函数,它会捕获异常并返回一个合理的默认值并放入一些utils模块?
答案 3 :(得分:1)
try:
x=int("234\r\n".strip())
except ValueError:
x=0
答案 4 :(得分:0)
你可以:
def to_int(unsafe_string):
return int(unsafe_string.strip())
但如果剥离的ValueError
不是有效数字,它将抛出unsafe_string
。您当然可以捕获ValueError并使用它执行您喜欢的操作。
答案 5 :(得分:0)
在不知道您期望什么样的输入的情况下,很难说什么是“足够”来解决这个问题。如果你只是担心追踪新行,那么Xavier Combelle或者gruszczy的答案就足够了:
try:
x = int(value)
except ValueError:
x = 0
如果你必须在字符串中的任何地方找到任何整数,那么你可能需要这样的东西:
import re
try:
x = int(re.search(r'(0|(-?[1-9][0-9]*))', searchstring).group(0))
except TypeError: # Catch exception if re.search returns None
x = 0
答案 6 :(得分:0)
在Python 3.0(IDLE)下,这很好用
strObj =“234 \ r \ n”
尝试:
#A = INT(strObj)
除了ValueError:
#A = -1
打印(一) >> 234
如果您正在处理您不能信任的输入,那么您永远不应该这样做,那么使用try是个好主意,除非在用户提供不兼容的数据时传递块来控制异常。它可能会让你更好地考虑尝试,除了将结构作为保护数据兼容性的防御措施,而不是简单地隐藏错误。
尝试:
a = int(strObj)#user sets strObj =“abc”
除了ValueError:
一个= -1如果是!= -1:
#user提交的兼容数据
其他:
#inform用户的错误
我希望这会有所帮助。
答案 7 :(得分:0)
def str_to_int(a):
str_to_int_output=""
for i in range(len(a)):
for b in range(10):
if a[i]==str(b):
str_to_int_output+=a[i]
return int(str_to_int_output)
fn for“str to float”有点复杂,但我认为如果需要它我可以做到。