Python F-String Literal调用kwargs报错:语法错误原因排查
F-String语法错误原因解析
先看你提供的代码:
def myfunc (*args, **kwargs): print (args) print (kwargs) print (f'I would like {args[0]} {kwargs['food']}') #Example #2 print ('I would like {} {}'.format(args[0], kwargs['food'])) myfunc(10,20,30,fruit = 'orange', food = 'eggs', animal = 'dog')
报错SyntaxError: f-string: unmatched '['的原因很直接:f-string的外层单引号和内部kwargs['food']的单引号发生了冲突。
Python解析f-string时,会把开头的'作为字符串的起始标记,当遇到kwargs['food']里的第一个'时,它会认为这是字符串的结束位置。这样一来,food']}就变成了脱离字符串的代码,其中的[没有对应的闭合结构,所以触发了语法错误。
而注释里的format方法没有这个问题,是因为format的字符串和后面的kwargs['food']是分开的两个部分,不存在引号嵌套冲突。
修正方法有两种:
- 把f-string的外层单引号换成双引号,内部保留单引号:
print(f"I would like {args[0]} {kwargs['food']}")
- 把内部的单引号换成双引号,外层保留单引号:
print(f'I would like {args[0]} {kwargs["food"]}')
修正后运行代码,就能得到和format方法一样的输出:I would like 10 eggs。
内容的提问来源于stack exchange,提问作者Jorge Gandara
相关产品推荐
相关产品推荐

