使用eval解析文件路径时遭遇SyntaxError语法错误求助
解决eval解析文件路径时的SyntaxError问题
错误原因
你的代码报错是因为eval执行的字符串中,单个反斜杠\被当作转义字符,它会转义后续的单引号,导致字符串无法正确闭合,进而触发SyntaxError: unexpected character after line continuation character错误。
在Python中:
- 单个
\是转义符,用来表示特殊字符(比如换行符\n) - 要表示实际的反斜杠,需要用
\\转义 - 而当你把包含
\\的字符串放在双引号包裹的url变量里时,\\会被解析成单个\,所以eval执行时拿到的是未正确转义的路径字符串,引发错误。
解决方案(基于eval的修改)
将url字符串中的每个\\替换为\\\\,这样eval解析时会得到正确的单个反斜杠:
url= " 'C:\\\\Users\\\\xxx\\\\Desktop\\\\_Revenue\\\\Input\\\\' + str(yr) + '\\\\' + 'Survey' + YY + '_revenue.xlsx'" def test(yr): YY = str(yr)[2:] survey_url = eval(url) # 可添加打印验证路径是否正确 print(survey_url) test(2015)
执行后,survey_url会生成正确的路径:C:\Users\xxx\Desktop\_Revenue\Input\2015\Survey15_revenue.xlsx
更安全的替代方案(不使用eval)
其实完全不需要用eval来拼接路径,直接在函数内用f-string或者字符串拼接更简洁安全,避免eval带来的潜在风险:
方法1:f-string拼接
def test(yr): YY = str(yr)[2:] # 使用普通字符串 survey_url = f'C:\\Users\\xxx\\Desktop\\_Revenue\\Input\\{yr}\\Survey{YY}_revenue.xlsx' # 或者使用原始字符串(无需转义反斜杠) survey_url = rf'C:\Users\xxx\Desktop\_Revenue\Input\{yr}\Survey{YY}_revenue.xlsx' print(survey_url) test(2015)
方法2:字符串拼接
def test(yr): YY = str(yr)[2:] base_path = 'C:\\Users\\xxx\\Desktop\\_Revenue\\Input\\' survey_url = base_path + str(yr) + '\\' + 'Survey' + YY + '_revenue.xlsx' print(survey_url) test(2015)
内容的提问来源于stack exchange,提问作者123456
相关产品推荐
相关产品推荐

