将导入的变量作为参数时,“os”包中的某些函数会出现异常

问题描述

我有一个 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/"'

从配置文件中的路径值中删除周围的引号,或在使用前将其剥离。我更喜欢前者,因为它需要较少的纠正代码。