Python Variable von einem externen Modul zugeordnet ist, zugänglich für den Druck, aber nicht für die Zuordnung in dem Zielmodul

StackOverflow https://stackoverflow.com/questions/605399

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe zwei Dateien, eine in der Webroot ist, und ein anderer ist ein Bootstrap ein Ordner über die Web-Root befindet (dies ist die CGI-Programmierung durch die Art und Weise).

Die Indexdatei in dem Web-Root importiert die Bootstrap und weist eine Variable es, dann ruft eine Funktion, die Anwendung zu initialisieren. Alles bis hier funktioniert wie erwartet.

Jetzt, in der Bootstrap-Datei kann ich die Variable drucken, aber wenn ich versuche, einen Wert der Variablen zugewiesen werden ein Fehler ausgelöst wird. Wenn Sie die Zuordnung Anweisung keine Fehler geworfen werden wegzunehmen.

Ich bin wirklich gespannt, wie das Scoping in dieser Situation funktioniert. Ich kann die Variable drucken, aber ich kann es nicht asign. Dies ist auf Python 3.

index.py

# Import modules
import sys
import cgitb;

# Enable error reporting
cgitb.enable()
#cgitb.enable(display=0, logdir="/tmp")

# Add the application root to the include path
sys.path.append('path')

# Include the bootstrap
import bootstrap

bootstrap.VAR = 'testVar'

bootstrap.initialize()

bootstrap.py

def initialize():
    print('Content-type: text/html\n\n')
    print(VAR)
    VAR = 'h'
    print(VAR)

Danke.

Edit: Die Fehlermeldung

UnboundLocalError: local variable 'VAR' referenced before assignment 
      args = ("local variable 'VAR' referenced before assignment",) 
      with_traceback = <built-in method with_traceback of UnboundLocalError object at 0x00C6ACC0>
War es hilfreich?

Lösung

versuchen Sie dies:


def initialize():
    global VAR
    print('Content-type: text/html\n\n')
    print(VAR)
    VAR = 'h'
    print(VAR)

Ohne 'globale VAR' Python wollen lokale Variable VAR verwenden, und geben Sie "UnboundLocalError: lokale Variable 'VAR' vor der Zuweisung referenziert"

Andere Tipps

Sie es nicht global deklarieren, geben sie stattdessen und senden Sie es, wenn Sie einen neuen Wert haben müssen, wie folgt aus:

def initialize(a):
    print('Content-type: text/html\n\n')
    print a
    return 'h'

----

import bootstrap
b = bootstrap.initialize('testVar')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top