我需要解析客户端给出的一些操作。该动作是一个简单的字符串,其中包含动作一词:“ 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”一词更改为另一个。
答案 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()