我正在编写一个程序,将一些JSON编码的数据存储在一个文件中,但有时生成的文件是空白的(因为没有找到任何新数据)。当程序查找并存储数据时,我执行以下操作:
with open('data.tmp') as f:
data = json.load(f)
os.remove('data.tmp')
当然,如果文件是空白的,这将引发一个异常,我可以抓住,但不让我删除文件。我曾经尝试过:
try:
with open('data.tmp') as f:
data = json.load(f)
except:
os.remove('data.tmp')
我得到了这个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "MyScript.py", line 50, in run
os.remove('data.tmp')
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process
发生异常时,如何删除文件?
您需要编辑删除零件,以便它优雅地处理不存在的情况。
import os
try:
fn = 'data.tmp'
with open(fn) as f:
data = json.load(f)
except:
try:
if os.stat(fn).st_size > 0:
os.remove(fn) if os.path.exists(fn) else None
except OSError as e: # this would be "except OSError, e:" before Python 2.6
if e.errno != errno.ENOENT:
raise
另请参阅删除可能不存在的文件的大多数python方法
您可以在单独的函数中提取无声删除。
同样,从同一个其他SO问题:
# python3.4 and above
import contextlib, os
try:
fn = 'data.tmp'
with open(fn) as f:
data = json.load(f)
except:
with contextlib.suppress(FileNotFoundError):
if os.stat(fn).st_size > 0:
os.remove(fn)
我个人更喜欢后一种方法——它是明确的。
如何分离出文件读取和json加载?json.loads
的行为与json.load
完全相同,但使用字符串。
with open('data.tmp') as f:
dataread = f.read()
os.remove('data.tmp')
#handle exceptions as needed here...
data = json.loads(dataread)
“异常信息” 在WebDriver.dll中发生类型为“System.InvalidOperationException”的未处理异常 附加信息:没有这样的驱动程序(NoSuchDriver) OpenQa.Selenium.edge.EdgedRiver..ctor(字符串edgeDriverDirectory,EdgeOptions选项) ConsoleApplication.Program.
我想创建一个文件;如果它已经存在,我想删除它并重新创建它。我尝试这样做,但它抛出一个Win32错误。我做错了什么?
你好,我是PHP中的web开发人员,最近迁移到javaEE。我在mysql中创建表。这是第一类: . . . 这是我的第二节课: . . .
我在从JSON发送日期字段时收到一个错误。 Pojo类: 错误: JSON分析错误:无法从字符串“2018-07-10”反序列化类型的值:格式应为“yyyy-mm-dd hh:mm:ss.000”;嵌套异常为com.fasterxml.jackson.databind.exc.InvalidFormatException:无法从字符串“2018-07-10”反序列化类型的值:格式应为“yyyy-m
问题内容: 我当前正在使用sed脚本: cd(根文件夹)优先 当前,此脚本在标记下删除所有包含其子文件夹的文件夹上的,xml的示例为: 所以现在,我需要排除那些带有“ scheduler-service- core”或基本上是scheduler的标签,因为我不需要解析它,但是我的脚本正在删除它,因为它在依赖项标签下,我该如何排除这一点?“调度程序”一词将发生变化,因为我将在不同的服务上使用它,因此
我有一个带有绑定的REST-dsl骆驼路由:json_xml with.type()和outType()。当没有异常发生时,它工作得很好。也就是说,json输入给出了json输出。Xml输入给出Xml输出。