gpt4 book ai didi

python - `shutil.rmtree` 不适用于 `tempfile.TemporaryDirectory()`

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:22 25 4
gpt4 key购买 nike

考虑这个测试

import shutil, tempfile
from os import path
import unittest

from pathlib import Path

class TestExample(unittest.TestCase):
def setUp(self):
# Create a temporary directory
self.test_dir = tempfile.TemporaryDirectory()
self.test_dir2 = tempfile.mkdtemp()

def tearDown(self):
# Remove the directory after the test
shutil.rmtree(self.test_dir2)
shutil.rmtree(self.test_dir.name) #throws error

def test_something(self):
self.assertTrue(Path(self.test_dir.name).is_dir())
self.assertTrue(Path(self.test_dir2).is_dir())

if __name__ == '__main__':
unittest.main()

但是在tearDown 中出现错误

FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmpxz7ts7a7'

它指的是 self.test_dir.name

根据 the source code for tempfile ,两个元素是相同的。

    def __init__(self, suffix=None, prefix=None, dir=None):
self.name = mkdtemp(suffix, prefix, dir)
self._finalizer = _weakref.finalize(
self, self._cleanup, self.name,
warn_message="Implicitly cleaning up {!r}".format(self))

而且我没有在上下文中使用它,所以据我所知,不应调用 __exit__()

发生了什么事?

最佳答案

不要使用 shutil 清除这些。 tempfile.TemporaryDirectory 类提供了一个 cleanup() 方法,如果您想选择加入显式清理,只需调用该方法即可。

您的代码崩溃的原因是 TemporaryDirectory 类被设计为在超出范围后自行清理(引用计数为零)。但是,由于您已经手动从文件系统中删除了该目录,因此当实例随后尝试删除自身时,拆卸会失败。 “没有这样的文件或目录”错误来自 TemporaryDirectory 自己的拆卸,它不是来自您的 shutil.rmtree 行!

关于python - `shutil.rmtree` 不适用于 `tempfile.TemporaryDirectory()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50649701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com