Python 3.6.5 - os.makedirs / os.mkdir 不会创建目录而没有任何错误



我需要任何帮助来解决我的Python 3.6.5代码的一个奇怪问题。该错误仅在我的项目执行期间产生,我没有在另一个脚本执行期间成功重新创建它......我想在函数__init__某个类中创建一些文件夹,使用 os.makedirs :

self.working_folder = Preprocessor.prepare_folder(working_folder)  # create final working folder
self.previews_folder = Preprocessor.prepare_folder(previews_folder)  # create previews folder

这里创建了"working_folder"而不是"previews_folder",没有任何错误。如果我尝试此代码:

self.working_folder = Preprocessor.prepare_folder(working_folder)  # create final working folder
Preprocessor.prepare_folder(previews_folder)  # create previews folder

两个文件夹均已正确创建。

有关"Preprocessor.prepare_folder"的详细信息:

def prepare_folder(folder_path):
print("Path to create: ", folder_path)
while True:
try:
os.makedirs(folder_path)
print("Folder created as: ", folder_path)
return folder_path
except FileExistsError:
if folder_path[-1] in ("/", "\"):
folder_path = folder_path[:len(folder_path) - 1]
if folder_path[-1].isdigit():
temp = folder_path[-1]
for i in range(len(folder_path) - 2, -1, -1):
try:
if folder_path[i].isdigit():
temp = folder_path[i] + temp
else:
folder_path = folder_path[:i + 1]
break
except IndexError:
raise EnvironmentError
folder_path = folder_path + str(int(temp) + 1)
else:
folder_path += '1'

操作系统 : 视窗 10 x64 系列

回溯:

Path to create:  C:UsersMPuisDownloadsTestsclassifier_temp
Folder created as:  C:UsersMPuisDownloadsTestsclassifier_temp
Path to create:  C:UsersMPuisDownloadsTestspreviews_temp
Folder created as:  C:UsersMPuisDownloadsTestspreviews_temp
Process finished with exit code 0

带有"dir"命令的DOS终端:

Répertoire de C:UsersMPuisDownloadsTests
11/04/2018  23:42    <DIR>          .
11/04/2018  23:42    <DIR>          ..
11/04/2018  23:42    <DIR>          classifier_temp
10/04/2018  12:18    <DIR>          Models
10/04/2018  13:12    <DIR>          To_sort
0 fichier(s)                0 octets
5 Rép(s)  113 340 448 768 octets libres

最小的类示例(正确创建两个文件夹,无法成功重新创建问题,但是这些是相同的类,值和相关函数,而不是另一个不起作用)

""" A script sample of error """
if __name__ == '__main__':
import os
output_folder = os.path.abspath("C:/Users/MPuis/Downloads/Tests/Models")

class Preprocessor:
# ---- Settings ----
default_wfolder = 'classifier_temp'
default_previews = 'previews_temp'
def __init__(self, target_folder, working_folder=default_wfolder, previews_folder=default_previews):
if working_folder == Preprocessor.default_wfolder:
working_folder = os.path.join(os.path.dirname(os.path.abspath(target_folder)), working_folder)
if previews_folder == Preprocessor.default_previews:
previews_folder = os.path.join(os.path.dirname(os.path.abspath(target_folder)), previews_folder)
self.target_folder = target_folder
self.working_folder = Preprocessor.prepare_folder(working_folder)  # create final working folder
# Error with this statement
self.previews_folder = Preprocessor.prepare_folder(previews_folder)  # create previews folder
@staticmethod
def prepare_folder(folder_path):
print("Path to create: ", folder_path)
while True:
try:
os.makedirs(folder_path)
print("Folder created as: ", folder_path)
return folder_path
except FileExistsError:
print("File exists")
return None

test = Preprocessor(target_folder=output_folder)
print("Script done")

你对这个奇怪的问题有什么建议吗? 感谢您的任何帮助!

编辑经过一些测试,我尝试了以下代码:

self.working_folder = Preprocessor.prepare_folder(working_folder)  # create final working folder
self.previews_folder = Preprocessor.prepare_folder(previews_folder)  # create previews folder
os.makedirs(self.previews_folder)

然后我发现了一个错误:"文件存在错误:[WinError 183]",但是 DOS 终端中的"目录"命令写入的结果与先例测试相同......

比较类样本和生产类后解决的问题(如二战所建议) 在我的类预处理器中,显然是__del__函数在退出之前删除了"previews_folder"。

谢谢大家的帮助

最新更新