Python 用户输入给出;ValueError:以10为基数的int()的文本无效;

Python 用户输入给出;ValueError:以10为基数的int()的文本无效;,python,error-handling,discord,bots,discord.py,Python,Error Handling,Discord,Bots,Discord.py,我一直在尝试编写一个discord bot,该bot使用参数检查使用输入和命令,但我想检查它是字符串还是数字。让我解释清楚: 在我的代码中: @client.command() async def create(ctx, *args): # create a lobby firstarg = (int)(args[0]) if (firstarg >= 4 and firstarg <= 10): await ctx.send("Max pl

我一直在尝试编写一个discord bot,该bot使用参数检查使用输入和命令,但我想检查它是字符串还是数字。让我解释清楚:

在我的代码中:

@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)
@client.command()
异步定义创建(ctx,*args):#创建大厅
firstarg=(int)(args[0])

如果(firstarg>=4和firstarg,我认为您需要了解异常在Python和

在您的情况下,您需要捕获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)
@client.command()
异步定义创建(ctx,*args):#创建大厅
尝试:
firstarg=(int)(args[0])
除值错误外:
#字符串不是数字
等待ctx.send(“错误,请输入一个数字”)
返回(84)
其他:
#字符串是一个数字

如果(firstarg>=4和firstarg)这能回答您的问题吗?谢谢您的回答。实际上,我通过使用“isdigit()”很容易地解决了这个问题函数来检查我的第一个参数字符串是否有数字,但您的答案仍然非常有用,因为我不知道如何管理这样的异常。我还想知道,如果try有效,它是否仍然适用于else语句?在我看来,它似乎会尝试第一个语句,如果失败,它会做些什么“else”。哦,好吧,我的错,我认为如果没有捕获ValueError,else只是一个条件。非常感谢!是的,如果try语句没有引发任何异常,就会发生else。isdigit()是一个好主意,但为了完全准确,您应该使用IsDicimal(),因为根据文档,isdigit”覆盖不能用于构成以10为基数的数字的数字“难道不是比数字更糟糕吗?因为我只需要整数而不需要浮点数(4到10,其他什么都不需要)。所以不管字符串是什么,如果它不是从4到10,只需要整数,它只会跳过它。这有点让人困惑,但实际上不会。如果你阅读它,它会说:数字包括十进制字符和需要特殊处理的数字”。这两个函数都不能与float一起使用