You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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只是如实接收了这个参数。

解决方案

有三种常用解决方式:

  1. 用单引号包裹路径
    PowerShell中单引号内的内容不会被转义,直接传递原始字符串:
PS > python sample.py -w '.\test test\'
  1. 转义反斜杠
    把末尾的单个反斜杠改成两个,PowerShell会将\\解析为单个反斜杠:
PS > python sample.py -w ".\test test\\"
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:48:30