用户输入给出“ValueError:int() 以 10 为底的无效文字:”

Posted

技术标签:

【中文标题】用户输入给出“ValueError:int() 以 10 为底的无效文字:”【英文标题】:User inputs gives "ValueError: invalid literal for int() with base 10:" 【发布时间】:2021-01-09 17:52:00 【问题描述】:

我一直在尝试编写一个不和谐的机器人来检查使用的输入和命令以及参数,但我想检查它是字符串还是数字。让我解释清楚:

在我的代码中:

@client.command()
async def create(ctx, *args): # create a lobby
    firstarg = (int)(args[0])
    if (firstarg >= 4 and firstarg <= 10):
        await ctx.send("Max players : " + args[0])
        return (0)
    else:
        await ctx.send("Error. Please enter a maximum number of players between 4 and 10.")
        return (84)

参数总是字符串,所以我认为我可以将它们转换为整数并且它可以工作。 但是,有一个问题。

当我在命令中使用除数字以外的任何内容时,不会显示任何错误消息,因为它无法将其转换为整数。

所以,我想知道是否有办法检查这个特定错误,以及我将来会遇到的其他类型的错误是否相同。

我不确定如何“检查它是否是一个字符串,以及是否没有将其转换为 int 并在其余代码中使用它”。

可能不是 100% 清楚,所以如果有不清楚的地方请告诉我,我会尽力澄清。

谢谢。

【问题讨论】:

这能回答你的问题吗? Can't catch ValueError in Python 【参考方案1】:

我认为你需要看看异常在 Python 和 how to handle them 中是如何工作的

在您的情况下,您需要捕获 ValueError,它会给出类似的结果:

@client.command()
async def create(ctx, *args): # create a lobby
    try:
      firstarg = (int)(args[0])
    except ValueError:
      # the string was not a number
      await ctx.send("Error. Please enter a number.")
      return (84)
    else:
      # the string was a number
      if (firstarg >= 4 and firstarg <= 10):
        await ctx.send("Max players : " + args[0])
        return (0)
      else:
        await ctx.send("Error. Please enter a maximum number of players between 4 and 10.")
        return (84)

【讨论】:

感谢您的回答。实际上我很容易通过使用“isdigit()”函数来检查我的第一个参数字符串是否有数字来修复它,但是你的答案仍然非常有用,因为我真的不知道如何管理这样的异常。我还想知道,如果尝试有效,它仍然适用于 else 语句吗?正如我所看到的,它看起来会尝试第一个语句,如果它失败了,它会做一些“其他”的事情。 哦,好吧,我的错,我认为 else 只是一个条件,如果 ValueError 没有被捕获。非常感谢! 是的,如果 try 语句没有引发任何异常,则 else 会发生什么。 isdigit() 是个好主意,但要完全准确,您应该使用 isdecimal() 因为根据文档, isdigit “涵盖了不能用于​​以 10 为基数形成数字的数字” 十进制不会比数字差吗?因为我只需要整数而不需要浮点数(4 到 10,而不是其他任何东西)。所以不管是什么字符串,如果不是从 4 到 10,只有整数,它会跳过它。 这有点令人困惑,但实际上没有。如果您阅读isdigit documentation 它指出:“数字包括十进制字符和需要特殊处理的数字”。并且这两个函数都不适用于 float

以上是关于用户输入给出“ValueError:int() 以 10 为底的无效文字:”的主要内容,如果未能解决你的问题,请参考以下文章

ValueError: int() 以 10 为基数的无效文字:''

ValueError: int() 以 10 为基数的无效文字:''但在调试器中它有一个值

ValueError: int() 以 10 为底的无效文字:''

Django - ValueError: int() 以 10 为基数的无效文字:''

ValueError: int() 以 10 为底的无效文字:'10025.0'

ValueError: int() 以 10 为底的无效文字:'196.41'