擅长:python、mysql、java
<p>问题不是文件正在关闭(不是),而是当您尝试使用回退时,文件指针不再位于预期位置(文件的开头):</p>
<pre><code>with open("some.yaml") as f:
try:
print("before", f.tell())
data = json.load(f)
except json.JSONDecodeError:
print("after", f.tell())
print("is closed:", f.closed)
</code></pre>
<p>这里,<a href="https://docs.python.org/3/library/io.html#io.IOBase.tell" rel="nofollow noreferrer">^{<cd1>}</a>方法返回文件指针的位置。你知道吗</p>
<p>一种解决方案是重置except块内的文件指针:</p>
<pre><code>with open("some.yaml") as f:
try:
JRNL_CONFIG = json.load(f)
except json.JSONDecodeError:
f.seek(0)
JRNL_CONFIG = yaml.load(f, Loader=yaml.FullLoader)
</code></pre>