Python

2016-03-24 13 views
-1

'da sınıf yapıcı argümanını kullanamıyorum Burada yanlış yaptığım şeyi alamıyorum. Aşağıdaki kod ile bir sınıf tanımlayan ediyorum:Python

import sqlite3 as lite 
import sys 
import os.path 
class database: 
    def __init__(self,dbfname): 
     if os.path.isfile(dbfname): 
      self.con = lite.connect(dbfname) 
     else: 
      self.con = self.createDBfile(dbfname) 
    #Other methods... 

Sonra ben

base = database("mydb.db") 

ben hayır "küresel" değişkeni olduğunu belirten bir hata olsun sınıfının bir örneğini yapmaya çalıştığınızda dbfname.

Traceback (most recent call last): 
File "testdb.py", line 67, in <module> 
base = database("mydb.db") 
File "testdb.py", line 13, in __init__ 
self.con = self.createDBfile(dbfname) 
File "testdb.py", line 15, in createDBfile 
if os.path.isfile(dbfname): 
NameError: global name 'dbfname' is not defined 

Bağımsız değişken değişkenini dbfname kullanmak için doğru yol ne olurdu?

+1

Bu tam olarak kodunuz ...? Çünkü bozuk ve/veya kötü biçimlendirilmiş. Lütfen buraya yapıştırdığınız şeyi ve özellikle de girintisini iki kez kontrol edin. – deceze

+0

"Sınıf veritabanı" satırının bir çoğaltmasını çözdüm: Bu ne demek istediniz? – jokogarcia

cevap

1

Bu kod güzel görünüyor. Hata, gönderdiğiniz postada değil;1 yönteminde (__init__()'da değil) 15 satırda testdb.py numaralı telefondan.

Bunu nasıl bilebilirim? Eh, dikkatli Python bize verdiği traceback bakmak sağlar:

Traceback (most recent call last): 
    File "testdb.py", line 67, in <module> 
    base = database("mydb.db") 
    File "testdb.py", line 13, in __init__ 
    self.con = self.createDBfile(dbfname) 
    File "testdb.py", line 15, in createDBfile 
    if os.path.isfile(dbfname): 
NameError: global name 'dbfname' is not defined 

ilk satır dediği gibi En son çağrı son olduğunu. Yani aşağıdan yukarıya doğru (ve yukarıdan aşağıya) bir geri okuma okudunuz.

çok son satırı gerçek hata, ama bu hemen önce:

File "testdb.py", line 15, in createDBfile 
    if os.path.isfile(dbfname): 

Yani yöntemle createDBfile() hat 15 üzerinde dosyanın testdb.py, bir hata oluştu söylüyor. Python da __init__() fonksiyonunda olduğu Üstü 15.

createDBfile() yönteme çağrıdır bu hattın içeriğini yazdırır ve bu (sınıf örneğini oluşturarak) __init__() işlevine çağrı yukarıda.

Bu createDBfile() yönteminin içeriğini göndermediniz, bu yüzden hatanın tam olarak nerede olduğunu söyleyemem. Ben fonksiyon argümanları (belki bir yazım hatası kadar basit?) Ile yanlış bir şey yaptığınızdan şüpheleniyorum.

+0

Kesinlikle doğru yerdesin, teşekkürler! CreateDBfile yönteminin tanımında dosya adı değişkeni için farklı bir isim kullandım ve sonra unutmuştum! – jokogarcia