Python调用自定义channel函数时switch分支逻辑不执行问题求助
问题原因
- 第一,
input()获取的用户输入是字符串类型,但你switcher字典的键是整数1、2,传字符串类型的'1'/'2'根本匹配不到对应的键值 - 第二,
channel()函数返回的是lambda匿名函数对象,你调用channel()的时候只拿到了函数,没有加()执行这个函数,所以对应的逻辑当然不会运行
修复后代码
# global vars channelArr = ['1','2'] # func channel 1 def getChOne(): print('Do something with channel 1') # func channel 2 def getChTwo(): print('Do something with channel 2') # func channel def channel(arg): switcher = { 1: lambda: getChOne(), 2: lambda: getChTwo(), } # 拿到lambda函数后直接执行,返回执行结果 return switcher.get(arg, lambda: "Invalid Channel")() # func start def start(): # get input print('\n') inputChannel = input('Channel 1 to 2: ').strip() # check input if inputChannel in channelArr: print('Selected Channel:', inputChannel) # 把字符串类型的输入转成整数,匹配switcher的键类型 channel(int(inputChannel)) else: exit() # init app if (__name__ == '__main__'): # call func start start()
改动说明
- 调用
channel()之前,将用户输入的字符串转成整数,和switcher的键类型匹配 channel()函数中,拿到对应的lambda函数后直接加()执行,保证对应频道的逻辑可以正常运行- 额外优化:提前对用户输入做strip处理,避免后续重复调用strip方法
内容的提问来源于stack exchange,提问作者user14691384
相关产品推荐
相关产品推荐

