Найти - Пользователи
Полная версия: Как делать защиту от ошибок во время записи в файл?
Начало » Python для новичков » Как делать защиту от ошибок во время записи в файл?
1
doza_and
Задача - хранить в файле изменяемые данные. Файл типа json те надо переписывать полностью. Но данные отдают все подряд, могут подсунуть гадость для записи. Как не потерять данные которые были накоплены ранее? Не нашел красивого готового решения, налепил велосипед…:( Самому он противен.
import json
class safe_open:
    u"""backup file then open for write, restore old version in the case of unhandled exceptions"""
    def __init__(self, name,fun,*args):
        self.name=name
        self.bak=self.name+".bak"
        self.fun=fun
        self.args=args
    def __enter__(self):
        if os.path.exists(self.bak):
            os.remove(self.bak)
        if os.path.exists(self.name):
            os.rename(self.name,self.bak)
        self.f=self.fun(self.name,*self.args)
        return self.f
    def __exit__(self, exc_type, exc_value, traceback):
        self.f.close()
        if not exc_type is None:
            if os.path.exists(self.bak):
                os.remove(self.name)
                os.rename(self.bak,self.name)
with safe_open("aaa.json",open,"wb") as f:
    json.dump(safe_open,f)
dimy44
Не по теме, но осмелюсь написать.
if not exc_type is None: --> if exc_type is not None:
режет глаз.
py.user.next
Возьми io.StringIO, выполни туда запись, а потом уже из него в файл.

>>> import json
>>> import io
>>> 
>>> s = io.StringIO('start')
>>> s.read()
'start'
>>> json.dump([1, 2, 3], s)
>>> json.dump([1, 2, 3], s)
>>> s.seek(0)
0
>>> s.read()
'start[1, 2, 3][1, 2, 3]'
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB