1

2 つのファイルがあり、1 つは Web ルートにあり、もう 1 つは Web ルートの 1 つ上のフォルダーにあるブートストラップです (ちなみにこれは CGI プログラミングです)。

Web ルートのインデックス ファイルは、ブートストラップをインポートしてそれに変数を割り当て、関数を呼び出してアプリケーションを初期化します。ここまでのすべてが期待どおりに機能します。

これで、ブートストラップ ファイルに変数を出力できますが、変数に値を代入しようとするとエラーがスローされます。割り当てステートメントを取り除いても、エラーはスローされません。

この状況でスコーピングがどのように機能するのか、私は本当に興味があります。変数を出力できますが、代入できません。これは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()

ブートストラップ.py

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

ありがとう。

編集:エラーメッセージ

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>
4

2 に答える 2

3

これを試して:


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

「グローバル VAR」がないと、Python はローカル変数 VAR を使用して、「UnboundLocalError: 割り当て前に参照されるローカル変数 'VAR'」を返します。

于 2009-03-03T07:23:30.337 に答える
0

次のように、グローバルに宣言しないで、代わりに渡し、新しい値が必要な場合はそれを返します。

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

----

import bootstrap
b = bootstrap.initialize('testVar')
于 2009-03-03T12:15:47.293 に答える