如何修复“ TypeError:切片索引必须为整数或无或具有__index__方法”错误

时间:2019-08-02 19:50:54

标签: python discord.py-rewrite

我正在尝试在不和谐机器人的“选择数字”游戏中区分不和谐消息(即数字)和即字母。我认为我可以只使用startswith参数来查看消息是否包含数字,但是无论何时尝试,它都将返回“ TypeError:切片索引必须为整数或None或具有 index 方法”。我该如何解决?

if current_guess.startswith('1','2','3'):
            current_guess = int(current_guess)
            if best_id == "N/A":
                best_guess = current_guess
                best_id = current_id
            else:
                if abs(current_guess-number)<abs(best_guess-number):
                    best_guess = current_guess
                    best_id = current_id
                else:
                    return

因为startwith仅允许搜索3个参数,所以我只复制了此代码3次,每次检查1-9中的三个数字。

我期望它能够检测一条消息是否由数字组成,但是它只会输出我不理解的错误。

 line 57, in PAN
    if current_guess.startswith('1','2','3'):
TypeError: slice indices must be integers or None or have an __index__ method

2 个答案:

答案 0 :(得分:0)

startswith仅接受一个字符串进行搜索;您可以将条件写为:

if any(guess.startswith(n) for n in ('1', '2', '3'))):
    ....

如果您只想知道字符串的第一个字符是否为数字,则也可以使用isdigit(尽管也可以与'0'匹配):

if guess[0].isdigit():
    ...

根据您真正想要寻找的内容,还可以考虑使用re module

if re.match('^[1-9]', guess)):
    ...

其中^表示字符串的起点,而[1-9]将匹配从'1''9'范围内的一个字符。

答案 1 :(得分:0)

如果我正确理解了您的问题,则要检查消息是否为数字。可以使用try /除外:

try:
    current_guess = int(current_guess)

except ValueError:
    # warn user about only being possible to send digits