user1524529
user1524529

Reputation: 905

NameError while handling command line arguments

I was trying out a few python test scripts with sqlite3.

Here is the script that I wrote

#!/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)

I keep getting this error and was not able to solve it.

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

Any idea what the problem is.

At this moment I use python 2.7.3

Upvotes: 0

Views: 752

Answers (3)

dbr
dbr

Reputation: 169545

Static analysis tools like pyflakes or pylint can be useful to catch silly errors like this

If you wrote the bulk of the code in a function (so it doesn't assume blub is a global variable, which don't make pyflakes/pylint complain):

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()

...then you would get a pair of errors, which points out exactly what the error is (you stored the argument in blub, but tried to access it with 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'

Upvotes: 0

Chris
Chris

Reputation: 342

You have not defined the variable "fni", but you are using it.

Upvotes: 0

kojiro
kojiro

Reputation: 77059

The last line of your script refers to a name fni that is not defined.

Upvotes: 2

Related Questions