Python:检查密钥是否是字典的一部分

lov*_*nta 0 python dictionary

我正在尝试用Python创建自己的irc bot(用于抽搐).我的命令有一本字典:

commands = {

    '!ping': {
        'cooldown': 30,
        'return': '!pong'
    },

    '!random': {
        'cooldown': 30,
        'return': 'command',
        'argc': 2,
        'arg_username': True,
        'usage': '!random <min> <max>'
    }

} # End of commands
Run Code Online (Sandbox Code Playgroud)

然后我有一个函数来检查发送的消息是否确实是一个命令:

import string

def is_valid_command(command):
    return True if command in commands.keys() else False
Run Code Online (Sandbox Code Playgroud)

所以,当我测试这个功能时,它似乎不起作用,我不知道我做错了什么:

message = "!ping"
print(str(is_valid_command(message)))
>>> False
Run Code Online (Sandbox Code Playgroud)

我试图将字典中的'!ping'更改为"!ping",然后将该消息更改为"!",甚至删除了'!' 它总是说它是假的.

谢谢,劳伦斯

编辑:

def is_valid_command(command):
    for key in commands.keys():
        print(key)
    print("input " + str(command))
    print(command in commands.keys())
    return command in commands.keys()
Run Code Online (Sandbox Code Playgroud)

结果如下:

!ping
!random
input !ping
False
Run Code Online (Sandbox Code Playgroud)

编辑2:@ e4c5希望我使用try/except,因为我快速尝试它(在那个方法内),它仍然返回False

try:
    cmd = commands[command]
    print ('Try True')
    return True
except KeyError:
    print('Try False')
    return False
Run Code Online (Sandbox Code Playgroud)

EDIT3:你'ping'之前修复了这个(message = u'!ping'),但是当我从其他地方读取一个字符串时,是否有一个函数执行这个unicoding?

Bło*_*tek 6

您的is_valid_command功能可以简化为:

def is_valid_command(command):
    return command in commands
Run Code Online (Sandbox Code Playgroud)