将字符串解析为int,下划线失败

时间:2018-12-04 16:57:11

标签: python python-3.x string int

我刚刚发现int('1_34')不会因为PEP 515而引发错误。但是我想抛出一个错误。有没有更严格的方法可以将字符串解析为int(也可以是float)来避免这种情况?

3 个答案:

答案 0 :(得分:2)

您可以检查字符串是否包含下划线,如果包含下划线,则引发异常。

这是一个例子:

s = "1_34"
if "_" in s:
    raise ValueError("string contains an underscore")
else:
    x = int(s)

对于s = "1_34",您将获得:

ValueError: string contains an underscore

对于s = "134",您将拥有x = 134

答案 1 :(得分:0)

def number(n):
    if n.isdigit():
        return int(n)
    elif n.count(".") == 1 and n.replace(".", "").isdigit():
        return float(n)
    else:
        raise ValueError("Not a number!")




print(number("345"))
print(number("34.5"))
print(number("1_34"))

这是最干净的方法。

答案 2 :(得分:0)

如果您要弄脏手,可以使用自己的继承builtin

class Int(int):
    def __init__(self, value):
        if '_' in value:
            raise ValueError("PEP 515 revoked - underscores not allowed")
        else:
            super().__init__()

如果您确实对PEP 515毫无用处,那么甚至可以隐藏内置的int

int = Int
# you can always back up the builtin first...
# _int = int

有些人可能不同意这个答案...