1

グローバルファイルが定義されているかどうかを確認しようとしています。

import os, sys, logging...

global my_logger

def init():
  if my_logger is None:
     print 'Logger needs to be initialized'

ただし、これを実行すると、次のエラーが表示されます。

NameError: global name 'my_logger' is not defined

変数が宣言されているかどうかを確認する方法はありませんか? チェックを実行する前に、グローバル変数を初期化する必要がありますか?

4

3 に答える 3

4

他の回答が述べたように、宣言時ではなく、グローバル変数へのアクセス時に global キーワードが必要です。何かを代入する予定があるかのように、変数を宣言するだけでよいことに注意してくださいglobal。global キーワードを使用せずに、より高いスコープから変数を読み取ることができます。

my_logger = None

def init_logger():
    #needs to use global because we assign to the variable
    global my_logger
    my_logger = MyLogger()

def someOtherFunction():
    #no need to use global as we only access the logger
    if my_logger:
        my_logger.info("i can has logger")
    else:
        print 'logger not initialized'
于 2012-08-22T13:44:40.363 に答える
3

globalグローバル変数を定義するときではなく、グローバル変数を参照する必要があるときにキーワードを使用します。

import os, sys, logging...

my_logger = None

def init():
  global my_logger
  if my_logger is None:
     print 'Logger needs to be initialized'
于 2012-08-22T13:40:36.953 に答える
3

globalキーワードを正しく使用していません。それに関するドキュメントを参照してください。

ただし、原則として、グローバル変数が次のように定義されているかどうかをテストできます。

defined = 'my_logger' in globals()
if defined:
    print('my_logger has not been defined')
于 2012-08-22T13:45:20.230 に答える