问题描述
我有一个 config 文件,正在使用 configparser
从中读取一些值,其中之一是 PROJECT_PATH
配置读取发生在单独的python文件中,导入强>到main.py
目标是列出PROJECT_PATH
中存在的所有目录
为此,我使用了 os.listdir()
,它会产生错误。
>>> os.listdir(PROJECT_PATH)
FileNotFoundError: [Errno 2] No such file or directory: '"/home/user/projects/"'
但是,如果我传递 path
硬编码,例如:os.listdir("/home/user/projects")
那么它正常工作并显示目录。
我也尝试使用 os.path.exists()
并且出现了类似的问题:
>>> os.path.exists(PROJECT_PATH)
False
>>> os.path.exists("/home/user/projects")
True
现在,更有趣的是:
当我创建一个局部变量时说 prj_path
并将路径值存储在那里,它工作。
>>> prj_path = "/home/user/projects/"
>>> os.path.exists(prj_path)
True
但是,如果我将 imported 变量 PROJECT_PATH
存储到 local 变量中,然后使用它,它就不起作用。
我还尝试了其他方法,例如再次排版 str(PROJECT_PATH)
并且这也不起作用。
基本上,任何使用导入变量 PROJECT_PATH
不的操作都有效,但仅使用局部变量和/或硬编码字符串有效!
我还尝试使用 pathlib
模块从字符串生成路径:pathlib.Path(PROJECT_PATH)
这也行不通。
当传递给上述任何函数时,使用导入的字符串的操作都不起作用。
解决方法
错误信息很清楚:No such file or directory: '"/home/user/projects/"'
实际路径被额外的双引号括起来并且不存在。
Strip 可以胜任:
>>> '"/home/user/projects/"'
'"/home/user/projects/"'
>>> '"/home/user/projects/"'.strip('"')
'/home/user/projects/'
,
看起来双引号是从配置文件加载的配置变量值的一部分。这是错误消息所建议的:
FileNotFoundError: [Errno 2] No such file or directory: '"/home/user/projects/"'
从配置文件中的路径值中删除周围的引号,或在使用前将其剥离。我更喜欢前者,因为它需要较少的纠正代码。