如何修复:Python 中的 "Switch" 语句无法识别输入字符串

How to fix: "Switch" statement in Python doesn't recognise input string

我需要解析客户给出的一些动作。动作是一个包含单词动作的简单字符串:“加载”、“开始”、“暂停”、....

我来自C世界,我是Python的新手。我需要一个 switch 语句,我用 switcher.get() 函数完成了它(见下面的代码)。

问题是这个切换器不能只识别字符串 'load',其他字符串可以正常工作(见下面的输出示例)。

为什么?

为了正确分析问题,我只给出了切换器案例,因为其余代码都可以工作,但对这部分没有用。 我尝试将字符串 'load' 直接提供给该函数,但它直接转到“未找到命令”除外区域“

switcher={
        'load': partial(load_wav,message_tocheck),
        'start': partial(start_wav,message_tocheck),
        'pause': partial(pause_wav,message_tocheck),
        'resume': partial(resume_wav,message_tocheck),
        'stop': partial(stop_wav,message_tocheck),
        'reset': partial(reset_ch,message_tocheck),
        'mqtt': partial(mqttrun),
        'help': partial(help),
        'zero':lambda:'lambda'
    }  
    try:
        func=switcher.get('load','INVALID')
        return func()
    except:
        print('-------- COMMAND NOT FOUND --------')

输出:

--------未找到命令--------

限制:A = 0,B = 8,C = 0,D = 8

等待样本 = 690

通道 0 上的 LED 矩阵。刺激 运行...

----------------帮助----------------

可能的命令是:

插入所有可能的主题进行订阅

----------------帮助----------------

如您所见,唯一不起作用的字符串是加载。问题是我无法将 'load' 单词更改为另一个单词。

no wayswitcher.get('load')产生异常,所以一定是下面的函数调用。

试试这个:

func = switcher.get('load')
if func is None:
    raise ValueError("Command not found")

func()  # at this point `func` is a valid member of `switcher`, but it still can raise exceptions

为什么带有 try/except 的代码不起作用:

try 块包含对 func 的调用,这可能引发异常。另外,可能在某些时候字典 包含你正在寻找的键,所以 get returns 一个字符串, which你最终调用了,这是不可能的,所以你得到了一个例外。

如果您想使用 try/except,请添加 else 子句:

try:
    func = switcher['load']
except KeyError:
    raise ValueError("Command not found")
else:
    # no exception was raised
    func()