web-dev-qa-db-fra.com

NameError: le nom global n'est pas défini

J'utilise Python 2.6.1 sur Mac OS X.

J'ai deux fichiers Python simples (ci-dessous), mais quand je lance

python update_url.py

Je monte sur le terminal:

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

J'ai essayé de renommer les fichiers et les classes différemment, c'est pourquoi il existe x et z aux extrémités. ;)

Fichier sqlitedbx.py

class SqliteDBzz:
    connection = ''
    curser = ''

    def connect(self):
        print "foo"

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

Fichier update_url.py

import sqlitedbx

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

if __== "__main__":
    main()
26
Wizzard

Tu as besoin de faire:

import sqlitedbx

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

if __== "__main__":
    main()
30
SilentGhost

essayer

from sqlitedbx import SqliteDBzz
5
joaquin

L'importation de l'espace de noms est un peu plus propre. Imaginez que vous importiez deux modules différents, les deux avec la même méthode/classe. De mauvaises choses peuvent arriver. J'oserais dire que c'est généralement une bonne pratique d'utiliser:

import module

plus de

from module import function/class
3
kfirbreger

C'est comme ça que Python fonctionne ... Essayez ceci:

from sqlitedbx import SqliteDBzz

De telle sorte que vous pouvez directement utiliser le nom sans le module englobant. Ou importez simplement le module et ajoutez le préfixe 'sqlitedbx' à votre fonction, classe, etc.

0
devsaw