Python:将字符串转换为整数

时间:2010-03-24 15:17:04

标签: python

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

该字符串通常以:'234\r\n'或类似的内容返回。

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

8 个答案:

答案 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”有点复杂,但我认为如果需要它我可以做到。