异常处理:函数尝试将字符串转换为整数

0 投票
2 回答
1263 浏览
提问于 2025-04-18 01:28

我正在尝试写一个函数,把一个字符串转换成整数。如果字符串里有不是数字的字符,就要抛出一个语法错误。这个函数应该检查字符串中的每个字符,如果都是数字,就返回一个整数。比如,字符串“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')

撰写回答