0

我需要解析客户给出的一些操作。action 是一个包含单词 action 的简单字符串:“load”、“start”、“pause”、....

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

问题是这个切换器不能只识别字符串'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 矩阵。刺激正在运行...

  • 帮助(工作):

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

可能的命令是:

插入所有可能的主题以订阅

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

如您所见,唯一不起作用的字符串是加载。问题是我不能用另一个词来改变“加载”这个词。

4

1 回答 1

3

没有办法产生switcher.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返回一个字符串,您最终会调用,这是不可能的,因此您会遇到异常。

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

try:
    func = switcher['load']
except KeyError:
    raise ValueError("Command not found")
else:
    # no exception was raised
    func()
于 2019-06-14T10:02:39.947 回答