Rumah  >  Soal Jawab  >  teks badan

python - weakly-referenced object no longer exists? 数据库连接关闭问题

#! python3
import mysql.connector
class A:
    def __init__(self):
        self.dbconfig = {....}
        self.conn = mysql.connector.connect(**self.dbconfig)
        self.cur = self.conn.cursor()
    def __del__(self):
        self.cur.close()
        self.conn.close()

数据库连接也成功了,但是执行完该类后就会报错:

Exception ignored in: <bound method A.__del__ of <__main__.**** object at 0x0000000001151358>>
Traceback (most recent call last):
  File "****.py", line *, in __del__
  File "*****\Python35\lib\site-packages\mysql\connector\cursor.py", line 344, in close
ReferenceError: weakly-referenced object no longer exists

还请知道什么原因的司机解惑!万分感谢!
按stackoverflow上的方案就是我写的这样,但是还是有问题,难道是我的翻译软件有问题?

PHP中文网PHP中文网2740 hari yang lalu1375

membalas semua(2)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:25:32

    Baiklah, jawab sendiri. Saya tidak tahu apa yang menyebabkan ralat saya akan menjawabnya kemudian apabila tahap saya lebih tinggi. Penyelesaian sementara:

    import mysql.connector
    class A:
        def __init__(self):
            self.dbconfig = {...}
            try:
                self.conn = mysql.connector.connect(**self.dbconfig)
                self.cur = self.conn.cursor()
                print('mysql conn success!')
            except:
                print("mysql conn error!")
    
        def __del__(self):
            #if self.cur:
            #    self.cur.close()
            if self.conn:
                self.conn.close()
    if __name__ == '__main__':
        a = A()

    Tambahan:
    Ternyata anda tidak boleh menutup kursor dalam __del__()

    balas
    0
  • 怪我咯

    怪我咯2017-04-18 10:25:32

    Mungkin konfigurasi anda salah dan anda tidak disambungkan ke mysql
    Jika kod ini self.cur = self.conn.cursor() melaporkan ralat, ini bermakna anda tidak disambungkan

    balas
    0
  • Batalbalas