含rsplit的Python列表推导式出现语法错误,如何修复?
问题:修复列表推导式中的语法错误
你有一个格式为x.y的字符串列表variables,想要编写列表推导式,保留{aggr}({var})部分,同时把as后面的内容替换成var按.拆分后的后半段(即y)再加上_{aggr}。你写出的代码报语法错误,但不做拆分的版本能正常运行,想知道如何修复。
错误原因
问题出在f-string的引号嵌套冲突上!你写的代码里,f-string用了单引号f'...',而内部的rsplit('.',1)又用了单引号包裹.,Python会把外层f-string的第一个单引号和rsplit(后的单引号当成一对,剩下的代码就会被解析成无效语法,自然报错。
而不拆分的版本[f'{aggr}({var}) as {var}_{aggr}' for var in variables]能正常运行,是因为它里面没有嵌套的引号,不会触发这个冲突。
修复方案
有三种简单的解决办法,任选其一即可:
方案1:将f-string的外层引号改为双引号
把外层的单引号换成双引号,内部的单引号就不会和它冲突了:
[f"{aggr}({var}) as {var.rsplit('.',1)[1]}_{aggr}" for var in variables]
方案2:将rsplit内的引号改为双引号
保持外层单引号不变,把rsplit里包裹.的单引号换成双引号:
[f'{aggr}({var}) as {var.rsplit(".",1)[1]}_{aggr}' for var in variables]
方案3:用转义符转义内部的单引号
在rsplit里的单引号前加反斜杠\进行转义,告诉Python这是字符串的一部分,不是结束符:
[f'{aggr}({var}) as {var.rsplit(\'.\',1)[1]}_{aggr}' for var in variables]
这三种方法都能解决语法错误,推荐前两种,代码可读性更高。
内容的提问来源于stack exchange,提问作者Caims
相关产品推荐
相关产品推荐

