无法从python中的函数内部访问全局变量

Shi*_*dla 2 python function global-variables

下面是我的代码

global PostgresDatabaseNameSchema
global RedShiftSchemaName

PostgresDatabaseNameSchema = None
RedShiftSchemaName = None

def check_assign_global_values():
    if not PostgresDatabaseNameSchema:
        PostgresDatabaseNameSchema = "Superman"
    if not RedShiftSchemaName:
        RedShiftSchemaName = "Ironman"

check_assign_global_values()
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误说

Traceback (most recent call last):
  File "example.py", line 13, in <module>
    check_assign_global_values()
  File "example.py", line 8, in check_assign_global_values
    if not PostgresDatabaseNameSchema:
UnboundLocalError: local variable 'PostgresDatabaseNameSchema' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

那么我们不能从函数内部访问或设置全局变量吗?

abc*_*ccd 6

global应该始终在函数内部定义,这是因为它告诉函数您想使用全局变量而不是局部变量。你可以这样做:

PostgresDatabaseNameSchema = None
RedShiftSchemaName = None

def check_assign_global_values():
    global PostgresDatabaseNameSchema, RedShiftSchemaName
    if not PostgresDatabaseNameSchema:
        PostgresDatabaseNameSchema = "Superman"
    if not RedShiftSchemaName:
        RedShiftSchemaName = "Ironman"

check_assign_global_values()
Run Code Online (Sandbox Code Playgroud)

您应该对如何使用global. 您可以搜索许多其他 SO 问题。例如这个问题在创建它们的函数之外的函数中使用全局变量