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
相关产品推荐
相关产品推荐

