【问题标题】:How to fix: "Switch" statement in Python doesn't recognise input string如何修复:Python 中的“Switch”语句无法识别输入字符串
【发布时间】:2019-06-14 09:56:40
【问题描述】:

我需要解析客户端给出的一些操作。 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 矩阵。刺激正在运行...

  • 帮助(工作):

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

可能的命令是:

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

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

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

【问题讨论】:

    标签: python python-3.x string switch-statement switchers


    【解决方案1】:

    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 返回一个字符串,您最终会调用它,它是'不可能,所以你得到一个例外。

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-05
      • 2015-10-03
      • 2014-12-02
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 2017-07-10
      • 2013-04-06
      • 1970-01-01
      相关资源
      最近更新 更多