0

私は sqlite3 でいくつかの python テスト スクリプトを試していました。

ここに私が書いたスクリプトがあります

#!/usr/bin/env python

from sqlite3 import dbapi2 as sqlite
from sys import argv,exit

db_name = "filenames.db"

def define_db():
    try:
        conn = sqlite.connect(db_name)
    except IOError as e:
        print "problem while creating/connecting the db:",e.args[0]
        exit(1)

    return conn

def write_db(conn,cursor,fni):
    conn.execute("CREATE TABLE IF NOT EXISTS file (filenames TEXT UNIQUE)")
    query = "INSERT OR REPLACE INTO file VALUES($filenames)"

    cursor.execute(query,[fni])
    cursor.close()  
    conn.commit()
    conn.close()
    print fni,"should now be in the db" 
    exit(0)

if __name__ == "__main__":
    if len(argv) == 2:
        etag = argv[1]
    else:
        print "no argument given - stopping now"
        exit(1)

    conn = define_db()
    cursor = conn.cursor()
    write_db(conn,cursor,fni)

このエラーが発生し続け、解決できませんでした。

Traceback (most recent call last):
  File "blah.py", line 37, in <module>
    write_db(conn,cursor,fni)
NameError: name 'fni' is not defined

問題が何であるかについての考え。

現時点では、python 2.7.3 を使用しています

4

3 に答える 3

2

スクリプトの最後の行は、fni定義されていない名前を参照しています。

于 2012-07-24T20:13:19.990 に答える
0

pyflakesまたはのような静的分析ツールはpylint、このようなばかげたエラーをキャッチするのに役立ちます

コードの大部分を関数に記述した場合 (そのため、blubpyflakes/pylint が文句を言わないグローバル変数であるとは想定されません):

def main():
    if len(argv) == 2:
        blub = argv[1]
    else:
        print "no argument given - stopping now"
        exit(1)

    conn = define_db()
    cursor = conn.cursor()
    write_db(conn,cursor,fni)

if __name__ == "__main__":
    main()

...次に、エラーが何であるかを正確に指摘するエラーのペアが表示されます (引数を に格納しましたblubが、 でアクセスしようとしましたfni):

$ pip install pyflakes
$ pyflakes example.py
example.py:30: local variable 'blub' is assigned to but never used
example.py:37: undefined name 'fni'
于 2012-07-24T21:10:14.133 に答える
0

変数「fni」を定義していませんが、使用しています。

于 2012-07-24T20:18:56.953 に答える