处理命令行参数时出现名称错误

2024-09-26 22:11:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用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)

我一直遇到这个错误,但没能解决它。在

^{pr2}$

知道有什么问题吗。在

现在我使用python2.7.3


Tags: namefromimportdbsqlitedefasexit
3条回答

脚本的最后一行引用了未定义的名称fni。在

静态分析工具,如pyflakespylint可以用来捕捉这样愚蠢的错误

如果您在函数中编写了大量代码(因此它不假定blub是一个全局变量,这不会使pyflakes/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访问它):

^{pr2}$

您尚未定义变量“fni”,但您正在使用它。在

相关问题 更多 >

    热门问题