将Python脚本转为Lambda函数时,Config字典Endpoint的F-string语法错误排查
问题根源
你遇到的语法错误是因为f-string的外层单引号与内部引用event['date_range']的单引号发生了冲突,Python无法正确识别f-string的边界,导致解析失败。
修复方案
以下几种方法都能解决这个问题,你可以根据习惯选择:
方法1:替换f-string外层引号为双引号
将包裹f-string的单引号改成双引号,同时转义$search参数内的双引号:
config = dict( scope = ["Mail.ReadWrite"], username = event['username'], cache_file = "token.cache", date_range = event['date_range'], endpoint = f"https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messages?$expand=attachments&$search=\"hasAttachments:true AND received:{event['date_range']}\"" )
方法2:转义内部单引号
如果坚持使用外层单引号,对event['date_range']里的单引号进行转义:
config = dict( scope = ["Mail.ReadWrite"], username = event['username'], cache_file = "token.cache", date_range = event['date_range'], endpoint = f'https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messages?$expand=attachments&$search="hasAttachments:true AND received:{event[\'date_range\']}"' )
方法3:提前提取变量(推荐)
先把event['date_range']赋值给一个独立变量,再在f-string中引用,代码更清晰且不易出错:
target_date_range = event['date_range'] config = dict( scope = ["Mail.ReadWrite"], username = event['username'], cache_file = "token.cache", date_range = target_date_range, endpoint = f'https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messages?$expand=attachments&$search="hasAttachments:true AND received:{target_date_range}"' )
方法4:使用str.format()替代f-string
若对f-string的引号规则不熟悉,可改用传统的字符串格式化方法:
config = dict( scope = ["Mail.ReadWrite"], username = event['username'], cache_file = "token.cache", date_range = event['date_range'], endpoint = 'https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messages?$expand=attachments&$search="hasAttachments:true AND received:{date_range}"'.format(date_range=event['date_range']) )
内容的提问来源于stack exchange,提问作者RunRabbit
相关产品推荐
相关产品推荐

