【问题标题】:Unable to teardown temporary file used by Pandas read_csv无法拆除 Pandas read_csv 使用的临时文件
【发布时间】:2018-01-24 06:12:26
【问题描述】:

我的单元测试拆解代码没有删除文件

test_utility1.dat

我什至尝试了 os.remove 也没有运气。我不明白为什么我的进程在引发错误后会保留文件。我在 python 3.6 上运行它并使用 Pycharm 作为我的 IDE。我所有的测试都通过了,除了拆解。

我的意思是我试图模拟,但我没有运气(新手,我只是无法理解或掌握这个概念)。所以我不得不创建一个临时文件并将其删除。我有同样的问题,所以我认为如果我尝试 textfixture 库会更好。但同样的错误。

更新了我的帖子

  • 我直接在操作系统上创建了一个名为 test_utility1.dat 的文件
  • 删除了显示我的临时文件创建的旧帖子
  • 还是一样的结果。

请帮忙。谢谢

protoype7.py

import sys
import pandas

def create_utility_config_dataframe(a):

cols = ['Name', 'D', 'L', 'J', 'H', 'E', 'M', 'RF', 'AF']
try:
    return pandas.read_csv(a, sep='\t', usecols=cols)

except Exception as ve:
    ve = (str(ve) + "\n\nPlease ensure utility config '%s' exist and is correctly formatted (tab delimited)" %a)
    sys.exit(ve)

test2_prototype7.py

from prototype7 import create_utility_config_dataframe
import os
import unittest

class TestCreateUtilityConfigDataFrame(unittest.TestCase):

    @classmethod
    def tearDownClass(cls):
        os.remove('test_utility1.dat')

    def test_when_parameters_is_invalid(self):

        self.assertRaises(SystemExit, create_utility_config_dataframe,'test_utility1.dat')

错误日志

PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'test_utility1.dat'

test_utility1.dat

Name.D.L.J.H.E.M.RF.AF
line1.150.4.2.150.2.Copper.1.true

【问题讨论】:

  • 您是否尝试过围绕clf.file.writestuff 使用上下文管理器,或者您是否尝试在写入后关闭文件?可能是由于setUp功能,您尝试拆除的文件仍处于打开状态,从而阻止了关闭权限
  • cls.file.write 没有关闭。我什至尝试了正常的创建文件并关闭。也是同样的问题。此清理错误仅发生在使用 test_utility1.dat 的测试中
  • 您能否尝试压缩代码中不相关的内容以重现错误?编写一个最小的 setUp 函数,扔掉不必要的测试。这也应该可以帮助您和我们更快地找到解决方案
  • 我将编辑我的帖子以反映这一点
  • 我完全按照你提到的@Quickbeam2k1

标签: python unit-testing pandas file-permissions temporary-files


【解决方案1】:

嗯,分辨率在下面。

初始代码sn-p

self.assertRaises(SystemExit, create_utility_config_dataframe, a)

新代码 sn-p

with self.assertRaises(SystemExit):
     create_utility_config_dataframe(a)

这解决了问题。这是assertRaise 代码的问题。我不完全确定为什么,但是如果我使用 with 语句,它现在可以正常工作了。

【讨论】:

    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2019-09-13
    • 2018-11-15
    相关资源
    最近更新 更多