2016-03-24 10 views
-1

Ich kann nicht bekommen, was ich hier falsch mache. Ich bin, die eine Klasse mit dem folgenden Code:Kann Klassenkonstruktor Argument in Python nicht verwenden

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... 

Dann, wenn ich versuche,

base = database("mydb.db") 

Ich erhalte eine Fehlermeldung eine Instanz der Klasse zu machen sagen, dass es keine „global“ ist variabel genannt 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 

Was wäre die richtige Methode, um die Argumentvariable dbfname zu verwenden?

+1

Ist das buchstäblich Ihr Code ...? Weil es kaputt und/oder schlecht formatiert ist. Bitte überprüfen Sie, was Sie hier eingefügt haben, und vor allem die Einrückung. – deceze

+0

Ich habe eine Duplizierung der Zeile "class database" behoben: Ist das was du meintest? – jokogarcia

Antwort

1

Dieser Code sieht gut aus. Der Fehler ist jedoch nicht in dem Code enthalten, den Sie gepostet haben. Es ist in testdb.py auf Linie 15 in der Methode (nicht in der __init__()).

Woher weiß ich das? Nun, sehen wir uns genau auf die Zurückverfolgungs Python gibt uns:

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 

wie die erste Zeile sagt, der letzte Anruf ist letzte. Sie lesen also eine Rückverfolgung von unten nach oben (und nicht von oben nach unten).

Die letzte Zeile ist der tatsächliche Fehler, aber kurz bevor das heißt:

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

So heißt es, dass in der Datei testdb.py der Linie 15, die in dem Verfahren createDBfile() ein Fehler aufgetreten ist. Python druckt auch den Inhalt dieser Zeile aus dem 15.

Above, dass der Anruf an die in Ihrer __init__() Funktion createDBfile() Methode ist, und darüber, dass der Aufruf die __init__() Funktion (durch die Klasseninstanz erstellen).

Sie haben den Inhalt dieser createDBfile()-Methode nicht veröffentlicht, so kann ich Ihnen nicht sagen, wo genau der Fehler ist. Ich vermute, dass Sie mit den Funktionsargumenten etwas falsch gemacht haben (vielleicht so einfach wie ein Tippfehler?)

+0

Sie haben absolut Recht, danke! Ich hatte einen anderen Namen für die Variable filename in der Definition der Methode createDBfile verwendet und dann vergessen! – jokogarcia

Verwandte Themen