Python中启用os.listdir打印语句后出现SyntaxError的原因
解决Python中os.listdir原始字符串引发的SyntaxError问题
兄弟,我一眼就瞅出问题根源了——你第一条print语句里的原始字符串末尾多了个反斜杠,这直接打乱了Python的语法解析逻辑,才会让错误提示看起来像是出在后面的print('c:\waste')行上,其实锅全在第一行的路径字符串上。
为什么会出现这个奇怪的报错?
Python的原始字符串(带r前缀)有个容易踩的坑:绝对不能以单个反斜杠结尾。因为原始字符串里的反斜杠会把紧随其后的引号(不管是单引号还是双引号)转义掉,导致整个字符串无法正确闭合。
你写的这条代码:
print(os.listdir(r"\\ftlengnas.eng.test.net\CWCDevops$\Dms\Staging\APS\Roles\\"))
末尾的那个反斜杠会把后面的双引号转义,Python会误以为这个字符串还没结束,它会把后面所有的代码(包括print('c:\waste')的内容)都当成这个超长字符串的一部分,自然就会抛出语法错误了。而你注释掉第一行后,后面的代码都是独立的语法单元,所以能正常运行,这完全符合这个逻辑。
怎么解决?
给你两个简单的解决方案:
- 去掉末尾的反斜杠:Windows路径末尾的反斜杠是可选的,
os.listdir对带不带末尾反斜杠的路径都能正确识别,直接改成这样就行:print(os.listdir(r"\\ftlengnas.eng.test.net\CWCDevops$\Dms\Staging\APS\Roles")) - 如果一定要保留末尾路径分隔符:可以用普通字符串转义所有反斜杠,或者用字符串拼接规避转义问题:
# 方案A:普通字符串,所有反斜杠转成双反斜杠 print(os.listdir("\\\\ftlengnas.eng.test.net\\CWCDevops$\\Dms\\Staging\\APS\\Roles\\")) # 方案B:原始字符串加空字符串拼接,避免末尾反斜杠转义引号 print(os.listdir(r"\\ftlengnas.eng.test.net\CWCDevops$\Dms\Staging\APS\Roles\" + ""))
顺便提一句后面的代码
你后面的print('c:\waste')里,\w不是Python的有效转义字符,所以暂时不会出问题,但如果换成\n、\t这类有效转义符就会出意外了。所以推荐用原始字符串print(r'c:\waste')或者转义反斜杠print('c:\\waste'),这两种写法更安全。
内容的提问来源于stack exchange,提问作者AhmFM
相关产品推荐
相关产品推荐

