gpt4 book ai didi

python - UnboundLocalError : local variable referenced before assignment - except it isn't? 全局/局部范围问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:21 25 4
gpt4 key购买 nike

所以我知道这个问题被问了很多,但我还没有找到任何与我正在发生的事情完全匹配的东西。

在我的程序 (Python 3.7.1) 中,启动时我想定义程序的安装位置,以及程序生成的文件将保存的默认位置。稍后在程序中,我想再次显示这些变量,并为用户提供将默认位置更改为其他位置的选项。

所以我在全局范围内有这段代码:

import os

installedDirectory = os.getcwd()

os.chdir('C:\\Program Files')

workingDirectory = os.getcwd()

print ('Program install location = ' + installedDirectory)
print ('Working directory = ' + workingDirectory)

程序的上述部分工作正常,并给出了这样的结果:

Program install location = C:\Users\Chuu\AppData\Local\Programs\Python\Python37-32\Scripts Working directory = C:\Program Files

但是在程序的后面,我在一个函数中调用了这些相同的变量,并为用户提供了更改变量 workingDirectory 的选项:

def hiimafunction():

print ('')
print ('Current program install location = ' + installedDirectory)
print ('')
print ('Current working directory where files are saved = ' + workingDirectory)
print ('')
print ('Where would you like files to be saved?')
print ('')
print ('Press 1 for the current program install location')
print (r'Press 2 for the default startup location - C:\\Program Files')
print ('Press 3 for a custom location')
print ('')
oliviahye = input()
if oliviahye == ('1'):
os.chdir(installedDirectory)
elif oliviahye == ('2'):
os.chdir('C:\\Program Files')
elif oliviahye == ('3'):
print ('')
print ('Type a path where you would like to save files.')
oliviahye = input()
os.chdir(oliviahye)
else:
hiimafunction()

workingDirectory = os.getcwd()

print ('')
print ('Current save location is now = ' + workingDirectory)

发生这种情况时,我会收到以下错误:

UnboundLocalError: local variable 'workingDirectory' referenced before assignment

虽然错误特别指向了这一行:

print ('Current working directory where files are saved = ' + workingDirectory)

...问题似乎出在函数中的这一行:

workingDirectory = os.getcwd()

如果我在函数中删除这一行,则不会出现错误,但程序当然也不会执行它应该执行的操作,即获取新分配的工作目录并将其分配给变量 workingDirectory。我也可以给它一个新变量(例如,workingDirectory2),它不会崩溃,但是这样就违背了让变量 workingDirectory 首先显示此数据的全部目的。我不明白为什么这一行在全局范围内没有问题,但当变量已经定义时,完全相同的行在函数内产生错误。

阅读这个问题,添加行:

global workingDirectory

进入程序的第一部分应该有所帮助,因为它应该停止程序在本地创建另一个具有相同名称的变量,但它似乎没有做任何事情,因为同样的错误会产生。谁能帮忙?

最佳答案

如果您在函数中任何地方分配一个名称,那么该名称对于整个函数都是局部的。

所以因为你有这条线:

workingDirectory = os.getcwd()

在函数的更下方,名为workingDirectory 的全局变量是否存在并不重要;当你尝试这样做时:

print ('Current working directory where files are saved = ' + workingDirectory)

它检查本地为该名称保留的插槽,发现它是空的,并引发错误。

如果你想独占使用全局名称(所以在分配时,全局被改变),添加:

global workingDirectory

到函数的顶部(在函数内,但在函数中的所有其他代码之前),并确保 workingDirectory 被赋予一些 在调用此函数之前全局值(例如,在顶层分配 workingDirectory = "Uninitialized"),或在使用它之前在函数内部(例如,将分配移动到 workingDirectory 在使用它的 print 之前)。

如果您想打印 全局,但随后存储值而不更改它,请为局部范围的版本使用不同的名称,并且读取全局(在这种情况下,您不需要显式声明它 global;只要您从不分配它,Python 就会假定它需要在嵌套的、全局的和内置的范围中查找它,在那个顺序)。

关于python - UnboundLocalError : local variable referenced before assignment - except it isn't? 全局/局部范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55821203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com