处理“FileExistError”期间出现“FileNotFoundError”

2024-09-29 23:28:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在类构造函数中创建一个目录,但有可能存在与我要创建的目录同名的目录。所以我尝试下面的方法

class SubVideoExtractor:
    def __init__(self, out_name=str()):
        self.out_abs = os.getcwd() + "/output/" + out_name
        try:
            os.mkdir(self.out_abs)
        except FileExistsError:
            subprocess.Popen(f"rm -rf {self.out_abs}").wait()
            os.mkdir(self.out_abs)

但当目录已经存在时,我在处理FileExistsError时遇到了FileNotFound错误

错误看起来如何:

Traceback (most recent call last):
  File "/home/lapestand/DEV/projects/SubVideoExtractor/SubVideoExtractor.py", line 22, in __init__
    os.mkdir(self.out_abs)
FileExistsError: [Errno 17] File exists: '/home/lapestand/DEV/projects/SubVideoExtractor/output/16035609841603553594'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "main.py", line 95, in <module>
    extractor = SubVideoExtractor(length=VIDEO_LENGTH, _format=VIDEO_FORMAT,
  File "/home/lapestand/DEV/projects/SubVideoExtractor/SubVideoExtractor.py", line 24, in __init__
    subprocess.Popen(f"rm -rf {self.out_abs}").wait()
  File "/usr/lib/python3.8/subprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.8/subprocess.py", line 1702, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'rm -rf /home/lapestand/DEV/projects/SubVideoExtractor/output/16035609841603553594'

为什么会发生这种情况以及如何解决


Tags: inpydevself目录homeinitos
2条回答

即使文件夹存在,您也可能希望继续:

os.makedirs(path, exist_ok=True)

但您可能更愿意在重新创建文件夹之前删除它:

shutil.rmtree(path)

还有其他方法可以在不捕获异常的情况下执行您正在尝试的操作。也就是说,在浏览文档之后,您应该将一个数组与命令一起传递给Popen,如下所示:

subprocess.Popen(["rm", "-rf", f"{self.out_abs}"]).wait()

相关问题 更多 >

    热门问题