【发布时间】:2022-01-21 02:38:12
【问题描述】:
我用 Python 编写了一段代码,它需要检查一些数组并确保其中不存在某些值。这些值是我这样定义的变量的形式:
tempArray = "".join(map(str,array))
dashTemp = tempArray[0:11]
dotTemp = tempArray[11:23]
spaceTemp = tempArray[23:35]
dashTemp = "".join(sorted(dashTemp))
dotTemp = "".join(sorted(dotTemp))
spaceTemp = "".join(sorted(spaceTemp))
然后我尝试检查这些值是否已经在我设置的现有文本文件中(我之前打开过):
if array in f or dashTemp in fa or dotTemp in fo or spaceTemp in fs:
f.close()
上面的代码工作得很好,但是当我把它改成下面的时候它就不起作用了:
if array in f or dashTemp in fa or dotTemp in fo or spaceTemp in fs or "6" in spaceTemp or "o" in spaceTemp:
f.close()
我收到错误“ValueError: I/O operation on closed file”。我不明白,因为我添加的内容与文件无关; spaceTemp 变量是唯一引用的新事物。我什至可以理解错误是否位于 f.close() 行,但不是。
文件“...”,第 76 行,在 gen
如果 f 中的数组或 fa 中的 dashTemp 或 fo 中的 dotTemp 或 fs 中的 spaceTemp 或 spaceTemp 中的“6”或 spaceTemp 中的“o”: ValueError: 对已关闭文件的 I/O 操作。
正如我所提到的,所有三个文件(f、fa、fo 和 fs)都是打开,并且无需在 spaceTemp 中添加“或“6”...”。
有什么想法吗?
更多上下文:
f = open("iterations.txt","r")
fa = open("dashes.txt","r")
fo = open("dots.txt","r")
fs = open("spaces.txt","r")
while restart == True:
while count < 36:
characterAdd = chars[random.randint(0,35)]
if not characterAdd in array:
array.append(characterAdd)
count += 1
else:
pass
tempArray = "".join(map(str,array))
dashTemp = tempArray[0:11]
dotTemp = tempArray[11:23]
spaceTemp = tempArray[23:35]
dashTemp = "".join(sorted(dashTemp))
dotTemp = "".join(sorted(dotTemp))
spaceTemp = "".join(sorted(spaceTemp))
if array in f or dashTemp in fa or dotTemp in fo or spaceTemp in fs or "6" in spaceTemp or "o" in spaceTemp:
f.close()
【问题讨论】:
-
没有更多上下文,我们无法说明为什么
f已经关闭。 -
您正在循环关闭文件
f,然后不再重新打开它。当您关闭它然后尝试在下一次迭代中再次使用它时会发生什么?in这里将尝试读取文件(并且还将光标移动到文件 iirc 的末尾,这使得文件无法读取,直到您重新seek开始)。 -
@vb4 最简单的答案是文件永远不会关闭,直到您将其添加到条件中(如果这是真的,这意味着该检查没有对原始条件做任何事情,因为它总是错误的)。
-
这里更重要的问题是,“你到底想做什么?”这可能不是解决方法。 为什么你要关闭文件流?你有检查它是否关闭的东西吗?也许只是获取读取值并对其进行测试?
-
要添加到@e.s.,这篇文章类似于XY Problem。请提供您的整体问题的背景(即 (x*) 而不仅仅是您尝试的解决方案(即 y)。
标签: python if-statement valueerror