Форум сайта python.su
Доброго времени суток!
Не могу разобраться, почему если метод вызвать из другого, то он не работает, а если из экземпляра, то все прекрасно:
class FoobarDB(object): def __init__(self , location): self.location = location try: self.f = open(location,'r') except: self.f = open(location,'w') self.file.close() def set_db(self,key,value): with open(self.location,'r+') as self.file: self.data = self.file.read() if (self.data != ''): self.jsonData = json.loads(self.data) self.jsonData.update({key:value}) self.jsonData = json.dumps(self.jsonData) self.file.write(self.jsonData) self.file.flush() else: self.jsonData = {key:value} self.jsonData = json.dumps(self.jsonData) self.file.write(self.jsonData) self.file.flush()
Офлайн
Во время отладки видно, что программа как-то пропускает
self.file.write(self.jsonData)
Отредактировано enjoy44 (Март 31, 2020 03:27:54)
Офлайн
А чего вы хотите от операций с закрытым при выоде из with файлом?
Отредактировано doza_and (Март 31, 2020 07:15:07)
Офлайн
Убрать self.file.close() не помогает Все равно если вызвать из экземпляра т.е. myDB.set_db() - то работает, а если откуда-нибудь из другого метода этого же класса self.set.db, то не работает.
Отредактировано enjoy44 (Март 31, 2020 12:04:50)
Офлайн
enjoy44
Вам говорят о том, что в строке
with open(self.location,'r+') as self.file:
Офлайн
enjoy44я вообще не понимаю как оно у вас умудряеться работать, у вас self.file.write находиться вне with, оно должно вам I/O Error выдать.
Все равно если вызвать из экземпляра т.е. myDB.set_db() - то работает, а если откуда-нибудь из другого метода этого же класса self.set.db, то не работает.
[code python][/code]
Офлайн
PEHDOMЯ раньше получал сообщения об ошибках когда программировал в стандартной IDE, потом мне потребовалась отладка кода и я установил Visual Studio, там хоть и есть отладка, но бывает ошибки не выдает, просто программа закрывается и всё
Офлайн
def set_db(self,key,value): with open(self.location,'r+') as self.file: self.data = self.file.read() if (self.data != ''): self.jsonData = json.loads(self.data) self.jsonData.update({key:value}) self.jsonData = json.dumps(self.jsonData) self.file.write(self.jsonData) self.file.flush() else: self.jsonData = {key:value} self.jsonData = json.dumps(self.jsonData) self.file.write(self.jsonData) self.file.flush()
mydb = FoobarDB("mydb.db") mydb.set_db('testoviy_key','testoviy_value')
#ТЕЛО МЕТОДА ЭТОГО КЛАССА self.set_db('target',http) if not cookie and cookies: self.set_db("login",base64.b64encode(str(cookies).replace("'", '"'))) #ПРОДОЛЖЕНИЕ МЕТОДА ЭТОГО КЛАССА
Отредактировано enjoy44 (Март 31, 2020 13:41:02)
Офлайн
enjoy44это чтото новенькое, я такого еще не видел, можете запустить скрипт не из ВСкода, а просто из консоли, и выложить лог ошибки?
GIF - отладка
def set_db(self,key,value): with open(self.location,'r+') as self.file: self.data = self.file.read() if (self.data != ''): self.jsonData = json.loads(self.data) self.jsonData.update({key:value}) self.jsonData = json.dumps(self.jsonData) self.file.seek(0) else: self.jsonData = {key:value} self.jsonData = json.dumps(self.jsonData) self.file.write(self.jsonData) self.file.flush()
[code python][/code]
Офлайн
PEHDOMВсе равно не получается, в консоли тоже без ошибок
Офлайн