2009-03-03 12 views
1

, bir webroot olduğunu ve başka bir klasör web kök üzerinde bulunan bir önyükleme olduğu içinde atama için (bu CGI programlama olduğunu bu arada).Python değişken baskı için erişilebilir değil hedef modülü İki dosya var

Web köküne dizin dosyası ön yükleme alanı ithal ve ona bir değişken atar, sonra uygulamayı başlatmak için bir bir işlevi çağırır. Buradaki her şey beklendiği gibi çalışıyor. Ben bir hata atılır değişkene bir değer atamak çalıştığınızda

Şimdi, önyükleme dosyasında ben değişkeni yazdırmak, ancak. Atama ifadesini elerirseniz, hiçbir hata atılmaz.

Kapsam belirleme işleminin bu durumda nasıl çalıştığını gerçekten merak ediyorum. Değişkeni yazdırabilirim ama buna tahammül edemem. Bu

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) 

teşekkürler olduğunu.

Düzenleme: hata mesajı

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> 
+0

Hata iletinizi göndermek için yardım edin. – monkut

+0

Ve girintileriniz bootstrap.py listenizde gösteriliyor. – monkut

+0

Başlıklar için teşekkürler, yazıyı düzenleyeceğim. – BlueBadger

cevap

3

bu deneyin: başvurulan yerel değişken 'VAR':

'küresel VAR' piton olmadan
 

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

yerel değişken VAR kullanmak ve "UnboundLocalError vermek istiyorum atama öncesinde "

+0

Teşekkürler, mesajınız beni doğru yönde gösterdi. Daha fazla bilgi burada bulunabilir. http://stackoverflow.com/questions/370357/python-variable-scope-question – BlueBadger

0

Genel olarak beyan etmeyin, bunun yerine iletin ve bunun gibi yeni bir değere sahip olmanız gerekirse döndürün:

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

---- 

import bootstrap 
b = bootstrap.initialize('testVar') 
+0

Kapsam belirleme konusuna girecek ve bu yöntemi diğer durumlarda kullanacağım; ancak bu durumda index.py dosyasının herhangi bir işlem yapması beklenmiyor, sadece birkaç değer koyması gerekiyor. Önyükleme aslında işlem yapan başka bir sınıfın yüklenmesinden sorumludur. – BlueBadger