问题 有时候我们经常会看到类似的代码: assert os.path.isdir(path_model_dir)assert os.path.exits(path_model_dir) 如果填写一个相对路径作为path_model_dir,那将会产生灾难性后果。我们需要注意的有以下
有时候我们经常会看到类似的代码:
assert os.path.isdir(path_model_dir) assert os.path.exits(path_model_dir)
如果填写一个相对路径作为path_model_dir,那将会产生灾难性后果。我们需要注意的有以下几个要素:
os.path.exists() 方法并不直接使用sys.path中的路径来查找文件,它是通过调用操作系统的接口来检查给定路径是否存在。
当使用相对路径时,Python会首先将其解释为相对于当前的工作目录。通常情况下,交互式解释器的当前工作目录是启动解释器时所在的目录。
上面这两段话说明,如果你填写的是相对路径,这里所说的相对路径是相对于当前文件的相对路径,还是相对解释器的相对路径,是相对运行解释器,还是调试解释器,还是相对命令行的中的相对路径?曾在同一个编辑器里编辑代码,在运行的时候是可以直接运行的,但调试的时候却一直报错,后来发现同一编辑器里的调试解释器和运行解释器的相对路径是不同的(惊!)。
而且os.path.exists() 方法并不直接使用sys.path中的路径来查找文件,也不会使用~/.bashrc中的环境变量来查找文件,只会根据相对路径和绝对路径来查找文件。
建议有两点建议,核心要义在于使用绝对路径。
直接绝对路径写死字符串
(推荐)使用__file__拼接出相对于脚本文件的绝对路径
有些人问sys.path.append(path)中增加的path是用来干嘛的,其实这里面增加的path主要用于import导包的。即如果您想要将其他目录添加到 Python 的模块搜索路径中,可以将这些目录添加到 sys.path 列表中。这将使 Python 在搜索模块时自动包括这些目录。但是需要注意,这种方法是在 Python 导入模块时使用的,而不是在调用 os.path.exists() 方法时。