代码之家  ›  专栏  ›  技术社区  ›  gruszczy

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

  •  1
  • gruszczy  · 技术社区  · 7 年前

    我刚刚发现 int('1_34') 不会因为错误而抛出错误 PEP 515 . 但我希望它抛出一个错误。有没有更严格的方法来解析字符串 int s(和 float 那会避免吗?

    3 回复  |  直到 7 年前
        1
  •  2
  •   Henry Woody    7 年前

    下面是一个例子:

    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 .

        2
  •  0
  •   Tom Wojcik    7 年前
    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"))
    

    依我看,这是最干净的方法。

        3
  •  0
  •   r.ook jpp    7 年前

    如果你想弄脏你的手,你可以继承 builtin

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

    甚至可能会影响到建筑 int 如果您确实不需要PEP 515:

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

    有些人可能不赞成这个答案。。。

    推荐文章