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

Windows下接收用户输入目录路径执行os.chdir报错的求助

解决Windows路径输入导致的OSError问题

你遇到的问题根源其实很清晰——用户输入的路径里多了一层单引号,从报错信息里的"'C:\\Users\\NAME\\Desktop'"就能看出来:路径前后被单引号包裹了,而Windows系统会把这些引号当成路径的一部分,自然识别不了这个非法格式。

为什么直接写死路径没问题?

当你在代码里写os.chdir('C:/Users/NAME/Desktop')时,单引号是Python的字符串语法标记,真正传递给os.chdir的是引号内部的路径内容;但用input()获取用户输入时,如果你输入了'C:\\Users\\NAME\\Desktop'(带单引号),input()会把包括引号在内的所有内容都作为字符串返回,这就导致路径变成了带引号的非法格式。

解决方案

你只需要对用户输入的路径做一下清理,去掉前后可能存在的单引号或双引号即可,有两种简单的方式:

方式1:用strip()移除前后引号

修改代码中获取路径的部分:

import os

def menu(): 
    """ the main user-interaction loop """ 
    Cuts = "" 
    while True: 
        display_menu() 
        choice = int(input('Enter your choice: ')) 
        print() 
        if choice == 0: 
            print('input directory') 
            x = input().strip('\'"')  # 去掉前后的单引号和双引号
            os.chdir(x)

方式2:用shlex.unquote()处理(更通用)

如果用户输入的路径里有更复杂的引号情况(比如路径含空格时用户手动加了引号),shlex.unquote()可以更智能地处理:

import os
import shlex

def menu(): 
    """ the main user-interaction loop """ 
    Cuts = "" 
    while True: 
        display_menu() 
        choice = int(input('Enter your choice: ')) 
        print() 
        if choice == 0: 
            print('input directory') 
            x = shlex.unquote(input())  # 自动处理包裹的引号
            os.chdir(x)

额外提醒

也可以在提示用户输入的时候,明确说明不要在路径前后加引号,从源头避免这个问题:

print('input directory (do not add quotes around the path)')

这个问题和你之前尝试的路径转义无关——转义是针对Python字符串写法的,而这里的核心问题是用户输入的原始内容包含了多余的引号,清理掉就可以正常运行了。

内容的提问来源于stack exchange,提问作者Pymateur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:57:49