NameError: глобальное имя не определено - PullRequest
26 голосов
/ 20 октября 2010

Я использую Python 2.6.1 в Mac OS X.

У меня есть два простых файла Python (ниже), но когда я запускаю

python update_url.py

, я получаю на терминале:

Traceback (most recent call last):
  File "update_urls.py", line 7, in <module>
    main()
  File "update_urls.py", line 4, in main
    db = SqliteDBzz()
NameError: global name 'SqliteDBzz' is not defined

Я попытался переименовать файлы и классы по-разному, поэтому на концах есть x и z.;)

Файл sqlitedbx.py

class SqliteDBzz:
    connection = ''
    curser = ''

    def connect(self):
        print "foo"

    def find_or_create(self, table, column, value):
        print "baar"

Файл update_url.py

import sqlitedbx

def main():
    db = SqliteDBzz()
    db.connect

if __name__ == "__main__":
    main()

Ответы [ 4 ]

30 голосов
/ 20 октября 2010

Вам нужно сделать:

import sqlitedbx

def main():
    db = sqlitedbx.SqliteDBzz()
    db.connect()

if __name__ == "__main__":
    main()
5 голосов
/ 20 октября 2010

1001 * попробовать *

from sqlitedbx import SqliteDBzz
3 голосов
/ 20 октября 2010

Импорт пространства имен несколько чище. Представьте, что вы импортируете два разных модуля, оба с одним и тем же методом / классом Может случиться что-то плохое. Я бы сказал, что это хорошая практика:

import module

над

from module import function/class
0 голосов
/ 26 марта 2013

Вот как работает Python. Попробуйте это:

from sqlitedbx import SqliteDBzz

Так, что вы можете напрямую использовать имя без включающего модуля. Или просто импортируйте модуль и добавьте «sqlitedbx». к вашей функции, классу и т. д.

...