python - 用户输入给出 “ValueError: invalid literal for int() with base 10:”

标签 python error-handling discord bots discord.py

我一直在尝试编写一个discord 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)
参数始终是字符串,因此我认为我可以将它们强制转换为整数,并且可以正常工作。
但是,有一个陷阱。
当我在命令中使用数字以外的任何内容时,不会显示任何错误消息,因为它无法将其转换为整数。
因此,我想知道是否有一种方法可以检查此特定错误,以及将来是否会遇到其他类型的错误。
我不确定如何“检查它是否为字符串,以及是否未将其转换为int并在其余代码中使用它”。
它可能不是100%清晰,因此,如果有一些不清楚的地方,请告诉我,我会尽力澄清。
谢谢。

最佳答案

我认为您需要研究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)

关于python - 用户输入给出 “ValueError: invalid literal for int() with base 10:”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64029473/

相关文章:

node.js - 快速错误处理 - 获取状态代码

javascript - 有没有办法使用 setTimeout 为我的代码添加冷却时间,这样人们就不会向命令发送垃圾邮件?

python - tf.scatter_update 或 tf.scatter_nd_update 可以用于更新张量的列切片吗?

python - 无法通过旧的 secure_auth 连接到 MySQL

python - 在 SIGNAL 之后继续使用 gdb 中的 python 脚本

angular - 如何很好地向Angular RXJS Observable订户抛出错误

Python ctypes 和 void const 指针

php - 使用JQuery处理PHP运行时错误/通知/警告的最佳方法

javascript - 代码将自身循环三次并运行 "If"语句两次和 "Else"语句一次

c# - Discord.Net -- 如何使用 "@"使 Bot Ping 用户