异常处理:函数尝试将字符串转换为整数
我正在尝试写一个函数,把一个字符串转换成整数。如果字符串里有不是数字的字符,就要抛出一个语法错误。这个函数应该检查字符串中的每个字符,如果都是数字,就返回一个整数。比如,字符串“12a34”就是一个例子。
def string2int(sti):
try:
int(float(sti))
if sti.isdigit():
return sti
except Exception, e:
raise SyntaxError('not an integer')
在用Python可视化工具调试的时候,我在第4行遇到了一个属性错误:AttributeError: 'float' object has no attribute 'isdigit'。
我可以使用一个叫做all_digits的函数,它可以检查一个字符串,如果字符串里的所有字符都是数字,就返回True,否则返回False。不过,我也没能用这个函数让try语句正常工作。
我该怎么写这个函数,才能确保如果字符串确实代表一个正整数,就能返回这个整数呢?
2 个回答
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
这个正则表达式可以匹配所有(正数)整数,无论是普通形式还是科学计数法。
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')