Python argparse处理含空格及末尾反斜杠的Windows路径异常
Python argparse解析带空格且末尾含反斜杠的Windows路径问题解决
问题现象
使用Python的argparse库处理Windows路径时,若路径包含空格且末尾带有反斜杠(\),解析后的结果会把末尾反斜杠变成双引号(");但不含空格的路径则能正常解析。
复现代码
import argparse if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('-w', '--weight', type=str) args = parser.parse_args() # 注:原代码中args.weight_path为笔误,应为args.weight print(args.weight)
PowerShell测试示例
错误场景(带空格+末尾反斜杠):
PS > python sample.py -w ".\test test\" .\test test"
正常场景(无空格路径):
PS > python sample.py -w ".\testtest\" .\testtest\ PS > python sample.py -w "testtest\" testtest\ PS > python sample.py -w "testtest" testtest
问题原因
这不是argparse的问题,而是PowerShell的参数转义规则导致的:在PowerShell的双引号字符串中,反斜杠会被用作转义符,用来转义紧随其后的双引号。输入".\test test\"时,PowerShell会把末尾的\"解析成一个普通双引号,最终传递给Python的参数就是.\test test",argparse只是如实接收了这个参数。
解决方案
有三种常用解决方式:
- 用单引号包裹路径
PowerShell中单引号内的内容不会被转义,直接传递原始字符串:
PS > python sample.py -w '.\test test\'
- 转义反斜杠
把末尾的单个反斜杠改成两个,PowerShell会将\\解析为单个反斜杠:
PS > python sample.py -w ".\test test\\"
- 在Python代码中修复参数
如果无法控制输入方式,可以在代码里对参数做后处理,把末尾的双引号还原成反斜杠:
import argparse if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('-w', '--weight', type=str) args = parser.parse_args() # 修复末尾的"为反斜杠 if args.weight and args.weight.endswith('"'): args.weight = args.weight[:-1] + '\\' print(args.weight)
内容的提问来源于stack exchange,提问作者Cynki
相关产品推荐
相关产品推荐

