2014-04-05 30 views
0

我正在尝试编写一个函数,该函数将字符串转换为整数,并捕获任何不是数字的内容并返回SyntaxError。如果字符串中的所有字符都是数字,则此处的try应该接受一个字符串并返回一个整数。 (sti)的示例值将是12a34。异常处理,尝试将字符串转换为整数的函数

def string2int(sti): 
    try: 
     int(float(sti)) 
     if sti.isdigit(): 
      return sti 
    except Exception, e: 
     raise SyntaxError('not an integer') 

试图熨平它在Python可视化给了我一个属性错误在第4行: AttributeError的:“浮动”对象有没有属性“ISDIGIT”

有一个是all_digits功能,我可以使用它接受一个字符串,如果字符串的所有字符都是数字,则返回True,否则返回False,但我还没有能够尝试使用该字符串。

如何写这个,如果字符串确实表示一个正整数,那么返回该整数?

回答

1
def string2int(sti): 
    try: 
     return int(sti) 
    except ValueError: 
     raise SyntaxError('not an integer') 

或者:

def string2int(sti): 
    if sti.isdigit(): 
     return int(sti) 
    else: 
     raise SyntaxError('not an integer') 
+0

这两项工作。我敢肯定,我尝试了许多几乎完全相同的东西,关于这个尝试:除了:一定是把我扔了。谢谢你的更正! – exclamationmark1

0

在你的函数,如果sti是一个整数,这应该只是工作,只是定期整数像123甚至没有“+1”或“1E2”:

def string2int(sti): 
    try: 
     if sti.isdigit(): 
      return sti 

所以,你可以使用正则表达式:

import re 
matchInt = re.match("^\+?[0-9]+([eE][0-9]+)?$",sti) 
if matchInt: 
    return sti 

该正则表达式与所有定期显示的或以科学计数法显示的正整数相匹配。