2017-04-23 4 views
0

ich viele kleine Python-Skripte schreibe und in einem Verzeichnis zu halten und ich rufe sie in verschiedenen Schriftenrufenden Funktion, die in verschiedenen Modulen Python ist

Im Folgenden finden Sie das Skript und es ruft Funktion, die in einem anderen Regisseur gespeichert acc_repo:

from acc_repo import col 
import logging 
import getpass 
col.col() 
dc = raw_input(OKGREEN + "Choose DataCenter:" + ENDC) 
    File "ucs_qa.py", line 21, in <module> 
    dc = raw_input(OKGREEN + "Choose DataCenter:" + ENDC) 
NameError: name 'OKGREEN' is not defined 

Funktion, die

in acc_repo Verzeichnis gespeichert wird
def col(): 
    global HEADER 
    global OKBLUE 
    global OKGREEN 
    global WARNING 
    global FAIL 
    global ENDC 
    global BOLD 
    global UNDERLINE 
    HEADER = '\033[95m' 
    OKBLUE = '\033[94m' 
    OKGREEN = '\033[92m' 
    WARNING = '\033[93m' 
    FAIL = '\033[91m' 
    ENDC = '\033[0m' 
    BOLD = '\033[1m' 
    UNDERLINE = '\033[4m' 

Wie behebe ich den Fehler? Ist ich in Bezug auf die Handhabung vieler kleiner Python-Skripte richtig? Bitte beraten und helfen, das Problem

+2

Und die Frage ist ...? –

+0

Wo ist 'OKGREEN' definiert? Sie müssen es von dort importieren. –

+0

Versuchen 'col()' statt 'col.col()' –

Antwort

0

Versuchen

col.OKGREEN 

Genau wie Funktionen, Variablen in verschiedenen Dateien zu beheben müssen wissen, wo sie in befinden. Auf diese Weise können Entwickler gleichnamigen Variablen erstellen, ohne sich, welche Bibliothek sie sind Importieren.

0

Ihre Funktion col.col() erklärt globale Variablen, aber sie sind immer noch im Rahmen des Moduls, in dem sie deklariert sind. Nach dem Aufruf von col.col() können Sie auf die deklarierten Variablen zugreifen, indem Sie den Namen mit dem Modul col qualifizieren. Zum Beispiel können Sie OKGREEN mit col.OKGREEN

0

(aktualisiert die Antwort) Zugriff auf diese Versuchen:

from acc_repo import col 
import logging 
import getpass 

col.col() 

# import the OKGREEN.. etc after col() 
from acc_repo.col import * 

dc = raw_input(OKGREEN + "Choose DataCenter:" + ENDC) 

Die globalen Variablen nach col intialized werden() aufgerufen wird.


Dies ist jedoch eher eine schnelle Problemumgehung, damit Ihr Code funktioniert. Ich nehme an, Sie haben versucht, die globalen Variablen in main.py durch Aufruf von col() zu "global" zu machen, aber sie sind eigentlich nur im Bereich von col.py global. Daher ist die immer noch notwendig, nachdem col() aufgerufen wird.

Um das zu erreichen, was Sie wollen, ändern col.py zu (wie @ Maurice Antwort):

HEADER = '\033[95m' 
OKBLUE = '\033[94m' 
OKGREEN = '\033[92m' 
WARNING = '\033[93m' 
FAIL = '\033[91m' 
ENDC = '\033[0m' 
BOLD = '\033[1m' 
UNDERLINE = '\033[4m' 

dann die Leitung col.col(), entfernen und die anderen halten, wie sie sind.

+0

Datei "ucs_qa.py ", Zeile 20, in col() TypeError: 'Modul' Objekt ist nicht aufrufbar – asteroid4u

+0

ok Ich habe jetzt Ihre Verzeichnisstruktur – weitang114

0

Verwenden Sie keine globalen Variablen!

acc_repo.py:

HEADER = '\033[95m' 
OKBLUE = '\033[94m' 
OKGREEN = '\033[92m' 
WARNING = '\033[93m' 
FAIL = '\033[91m' 
ENDC = '\033[0m' 
BOLD = '\033[1m' 
UNDERLINE = '\033[4m' 

main.py:

from acc_repo import * 
import logging 
import getpass 

dc = raw_input(OKGREEN + "Choose DataCenter:" + ENDC) 
print(dc) 
Verwandte Themen