2016-03-24 3 views
-1

私がここで間違っていることを得ることができません。その後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... 

、私はクラスのインスタンス

base = database("mydb.db") 

を作るしようとしたとき、私はエラーを取得しない「グローバル」変数が存在しないことを言って:私は、次のコードでクラスを定義しています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 

変数dbfnameを使用する正しい方法は何ですか?

+1

それはあなたのコードですか...?それは壊れているか、ひどくフォーマットされているためです。ここに貼り付けたもの、特にインデントを確認してください。 – deceze

+0

"class database:"という行の重複を修正しました。 – jokogarcia

答えて

1

このコードは正常です。あなたが投稿したコードにエラーはありません。 のcreateDBfile()メソッドの15行目(__init__()にはありません)にあります。

どうすればよいですか?まあ、慎重にPythonは、私たちを与えるトレースバックを見てみましょう:

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 

を最初の行が言うように、最新の呼び出しは、最後です。だから、トレースバックを下から上へ(上から下へ)読まない。

非常に最後の行は、実際のエラーですが、ちょうどその前にある:。

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

だから、ファイルtestdb.pyに、ライン15上で、法createDBfile()にエラーが発生したことを言いますPythonはまたあなたの__init__()機能でそれ以上15

createDBfile()メソッドの呼び出しです。この行の内容を出力し、その(クラスのインスタンスを作成することによって)__init__()関数の呼び出し上記の。

あなたはこのcreateDBfile()メソッドの内容を投稿していないので、正確にどこにエラーがあるかはわかりません。私はあなたが関数の引数に何か間違っていると思われます(おそらくタイプミスのように簡単でしょうか?)

+0

あなたは絶対に正しく、ありがとう!私は、createDBfileメソッドの定義でfilename変数に別の名前を使用していましたが、それを忘れてしまいました! – jokogarcia

関連する問題