2017-08-21 4 views
0

私は最初のデータベースをPythonで作成しています。私はSQLiteを使用しています。私はfollowing the official tutorialだが、それは私に次のエラーを与えている:Python SQLite http://www.sqlitetutorial.net/sqlite-python/creating-database/

UnboundLocalError: local variable 'conn' referenced before assignment

は、私の知る限り理解し、これはそれがあまりにも早く電話をしたが、私はなぜ理解できないことを意味します。チュートリアルはただ恐ろしいされていることを

import sqlite3 
from sqlite3 import Error 

def create_connection(db_file): 
    """ create a database connection to a SQLite database """ 
    try: 
     conn = sqlite3.connect(db_file) 
     print(sqlite3.version) 
    except Error as e: 
     print(e) 
    finally: 
     conn.close() 

if __name__ == '__main__': 
    create_connection("C:\\sqlite\db\pythonsqlite.db") 
+1

編集でフルスタックトレースをあなたのポストをしてください結果となります。単なる推測ですが、 "create_connection"関数が.dbファイルが作成される前にsqlite3.connect(db_file)に接続しようとしているようですが、コードの別の部分が存在するかどうかは分かりませんこのexceprtコードの前に.db。 – Dylan

+0

'' 'create_connection(" pythonsqlite.db ")' ''への接続を変更しました。これはWindows 8マシンでスムーズに動作します。 – arsho

+1

@arshoこれは、実行時にCWDが起きたディレクトリにDBが作成されるようになるためです。 –

答えて

4

以下は私のコードです。ここで

はそれで間違っているものです:

1)パスC:\sqlite\db\がすでにマシン上に存在する場合にのみ動作します。

2)エスケープ文字の故障の可能性を最小限にするために表記"C:\\sqlite\db\pythonsqlite.db"(でも正しいが)r"C:\sqlite\db\pythonsqlite.db"として書かなければならない(このAA生ストリングことパイソンを伝える主要Rに気づく)(ラッキーDBがtest.dbと呼ばれていない場合、C:\\sqlite\db\test.dbは、\tがTABに変換されるため、どこか「面白い」を指します。

3)finally部分は常に実行されます。パスが存在しない場合は、unable to open database fileという印刷が表示されます。これは、DBを作成できないためです。 DBを作成できない場合は、接続を作成できません。接続を作成できない場合はconnが定義されていませんが、ブロックfinallyを実行します。

それを合計するには、次の

をパスが存在しない場合は、connが定義されていないが、conn.close()がまだ実行され、UnboundLocalError: local variable 'conn' referenced before assignment

+0

すばらしい説明!それを明確にし、各ステップを進んでいただきありがとうございます。 –

関連する問題