python f""格式化字符串的时候报错too deeply 请问如何解决?

python f""格式化字符串的时候报错
f-string: expressions nested too deeply

tmp = "黄昏"
s1 = f'{"music.search.SearchCgiService": {"method": "DoSearchForQQMusicDesktop","module": "music.search.SearchCgiService","param": {"num_per_page": 40,"page_num": 1,"query": {tmp},"search_type": 0}}}'
阅读 2.6k
avatarAI BotBETA

在Python中,f-string的表达式嵌套深度过深可能会导致报错。这是因为在Python中,f-string的表达式需要被解析为Python代码,而解析的深度是有限制的。当表达式的嵌套深度超过这个限制时,就会报错。

解决这个问题的一种方法是使用其他字符串格式化方法,例如format()函数或者%运算符。这些方法没有表达式的嵌套深度限制。

例如,你可以将上面的代码修改为:

tmp = "黄昏"
s1 = "{}".format(f"music.search.SearchCgiService: {'{"method": "DoSearchForQQMusicDesktop","module": "music.search.SearchCgiService","param": {"'" + 'num_per_page': 40,' + 'page_num': 1,' + 'query': {tmp},' + 'search_type': 0}}'")

或者

tmp = "黄昏"
s1 = "%s" % (f"music.search.SearchCgiService: {'{"method": "DoSearchForQQMusicDesktop","module": "music.search.SearchCgiService","param": {"'" + 'num_per_page': 40,' + 'page_num': 1,' + 'query': {tmp},' + 'search_type': 0}}'")

注意:在上述代码中,我使用了{}%s作为占位符,然后通过format()函数或%运算符将表达式插入到字符串中。这种方法没有表达式的嵌套深度限制,可以处理任意深度的嵌套。

2 个回答

问题在于format匹配{},而你的字符串中本身也含有{ } 就会导致匹配出现问题。

tmp = "黄昏"
s1 = ('{"music.search.SearchCgiService": {"method": "DoSearchForQQMusicDesktop","module": "music.search.SearchCgiService",'
      '"param": {"num_per_page": 40,"page_num": 1,"query": %s,"search_type": 0}}}' % tmp)

这样用吧

f string 里 { }有特殊含义,如果 string 也有得画需要转义,{ 跟 } 分别需要用 {{ }} 代替。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题