尝试测试字符串是否为整数时脚本崩溃

2024-09-29 17:11:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个twitch机器人做一个python脚本,它基本上是一个吃角子老虎机。免责声明-我对python完全陌生,所以请不要杀我。你知道吗

在脚本开始时,我有以下代码来检查是否键入了正确的命令,检查第一个参数是否是整数,以及检查用户是否有足够的点。这个想法是让他们选择一个数额赌博,所以成本线将改变,一旦我得到它的工作。你知道吗

if data.IsChatMessage():
    if (data.GetParam(0).lower() == settings["command"]
                    and isinstance((int(data.GetParam(1).lower())), int)
                    and settings["costs"] <= Parent.GetPoints(data.User)):

来自聊天室的输入总是以字符串形式出现,即使它只是一个数字。我可以用int()将其转换为int,但是如果没有任何东西或者除了数字之外还有其他东西,那么脚本就会完全崩溃。如何防止脚本崩溃并提醒用户需要输入整数?谢谢!你知道吗


Tags: and脚本声明dataifsettings机器人数字
3条回答

如果data.GetParam(1)不是整数,则行isinstance((int(data.GetParam(1).lower())), int)将引发ValueError异常。你知道吗

正如user8153所建议的,用try包装转换,除了block:

try:
    int(data.GetParam(1))
    print(data.GetParam(1) + 'is an integer')
except ValueError:
    print(data.GetParam(1) + 'is not an integer')

{或者,您可以使用

在做了一些研究之后,我认为可以使用try/except块来确保用户给出的值实际上是一个数字。你知道吗

try:
    i = int(string)
    # normal execution
except ValueError:
    # error msg

我在这里得到了答案: Converting String to Int using try/except in Python

你写道:

isinstance(
    (int(data.GetParam(1).lower())),
    int
)

这个片段有两个问题:

  • 调用int(..)构造函数,如果提供非整数(如"foobar18"),则可能会失败(错误);并且
  • 如果构造函数成功了,那么就可以保证结果是int,因此检查是无用的。你知道吗

所以现在的问题是怎么做。我们可以构造一个高级检查来检查字符串是否确实是整数,但问题是我们必须覆盖多个情况,而且很容易忘记一个。你知道吗

Python语言的思想是:EAFPEask更适合F而不是p终止。这意味着Python的哲学是鼓励尝试某些东西,在特殊情况下,处理它,而不是首先检查某个东西是否是整数。你知道吗

所以文可以这样写:

if data.IsChatMessage():
    try:
        int(data.GetParam(1).lower())  # we try it
        isint = True  # it worked!
    except ValueError:
        # that did not worked out very well, did it?
        isint = False
    if (data.GetParam(0).lower() == settings["command"]
                    and isint
                    and settings["costs"] <= Parent.GetPoints(data.User):
        pass

您最好总是指定您希望看到的错误(ValueError),因为例如,如果data.GetParam(1)引发另一个错误,您本身并不希望在那里处理它:这并不意味着data.GetParam(1).lower()不是整数,而是意味着data.GetParam(1)产生了一些(其他)错误。你知道吗

相关问题 更多 >

    热门问题