Python match/case定义sleep_in函数报第2行语法错误排查
问题背景
我想要定义一个名为sleep_in(weekday, vacation)的函数,规则如下:
- 参数
weekday:当日为工作日时取值为True,非工作日时取值为False - 参数
vacation:处于休假状态时取值为True,未休假时取值为False - 返回规则:非工作日或正在休假时可以睡懒觉,函数返回
True;工作日且未休假时返回False
函数预期输入输出如下:
sleep_in(False, False) → True sleep_in(True, False) → False sleep_in(False, True) → True sleep_in(True, True) → True
问题表现
编写的实现代码如下:
def sleep_in(weekday, vacation): match (weekday, vacation): case (False, False): return True case (True, False): return False case (False, True): return True case (True, True): return True
在Jupyter Notebook中运行代码时,抛出如下报错:
invalid syntax (line 2)
报错原因
报错根源是Python版本不支持match...case语法:match...case结构化模式匹配是Python 3.10版本才正式上线的语法特性,如果你当前Jupyter Notebook绑定的Python内核版本是3.9及更早版本,解释器无法识别match关键字,就会在match所在的第二行抛出语法错误。
修复方案
你可以二选一:
- 方案1:升级Jupyter使用的Python内核到3.10及以上版本,原有代码无需修改即可正常运行。
- 方案2:改用低版本Python兼容的写法,逻辑更简洁,推荐使用:
def sleep_in(weekday, vacation): return not weekday or vacation
如果习惯写分支判断,也可以用通用的if语句实现,兼容所有Python3版本:
def sleep_in(weekday, vacation): if weekday and not vacation: return False return True
内容的提问来源于stack exchange,提问作者mohsentajdeh
相关产品推荐
相关产品推荐

