2015-09-07 2 views
1

Я пытаюсь этот простой код в Python 3:ReferenceError: слабо не ссылается объект больше не существует, Python3

import mysql.connector 
class App(): 
    def __init__(self): 
     self.conexion = mysql.connector.connect(user='?', 
               password='?', 
               host='?', 
               db='?') 
     self.cursor = self.conexion.cursor() 
    def __del__(self): 
     self.conexion.close() 
     self.cursor.close() # The code works if i remove this line; 

myApp = App() 

код работает на Python 2 и Python 3, если я удалить self.cursor.close() линию. Это должно произойти?

Проблема заключается в том, когда я пытаюсь использовать self.cursor.close() внутри __del__, код работает, если self.cursor.close() находится внутри __init__, в противном случае, я даже могу создавать таблицы.

Ошибка Я испытываю это:

Exception ignored in: <bound method MySQL_App.__del__ of <__main__.MySQL_App object at 0x7f6f87f42278>> 
Traceback (most recent call last): 
File "filename.py", line 22, in __del__ 
File "/usr/lib/python3.4/site-packages/mysql/connector/cursor.py", line 338, in close 
File "/usr/lib/python3.4/site-packages/mysql/connector/cursor.py", line 310, in _have_unread_result 
ReferenceError: weakly-referenced object no longer exists 
+0

Почему вы определяете '__del __()'? Это очень необычно. – SingleNegationElimination

+0

Мне нужно закрыть соединения в конце. Я думаю, что лучший способ сделать это с помощью '__del __()' (не используется '__del__' в тех же ситуациях, что и деструктор?) – tjbrn

+0

Хорошо, я изменил' __del __() 'на' End() 'и для некоторых причина, по которой это просто работает ... – tjbrn

ответ

0

Вы делаете это неправильный путь вокруг. Поскольку вы создаете курсор после соединения, вам необходимо закрыть его до подключение.

self.cursor.close() 
self.conexion.close() 
+2

Я пробовал, но все та же ошибка – tjbrn

Смежные вопросы