如何解决:Python中的“ Switch”语句无法识别输入字符串

时间:2019-06-14 09:56:40

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

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

我来自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。问题是我无法将“ load”一词更改为另一个。

1 个答案:

答案 0 :(得分:3)

no way 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()