我没有答案,但我正在缩小范围。不管怎样,我混淆/混淆类型,我相信,在'os.path'之类的命令和str()类型之间提供。
由于我已经全局分配了日志文件,即使我可以在函数中打印它,当在fout = open(...
中使用变量时,它实际上是一个被引用的空值,即{{ 1}}不喜欢/不能使用它找到的类型。
错误:
open()
我只是写一个点文件的日志(由OSX留在USB驱动器上)进行删除,但是try / except现在正在崩溃。首先是原始版本。
工作代码:
UnboundLocalError: local variable 'fout' referenced before assignment
尝试更好的练习,我试图将日志文件规范和路径作为变量,以便在需要时可以对其进行修改 - 我希望使其跨平台可行。这些变量位于程序的头部,即不在main()中,但我传入它们并且print()语句显示我们已成功引用它们。即我打印出来:
logFile = "/Users/dee/Desktop/dotFile_names.txt"
try:
fout = open(logFile, 'w')
for line in dotFile_names:
fout.write(line)
except IOError as e:
print ("Error : %s not found." % fout)
finally:
fout.close()
尽管如此,我得到的错误是:
/Users/dee/Desktop/dotFile_names.txt
生成代码时出错
UnboundLocalError: local variable 'fout' referenced before assignment -
error points at the "fout.close()" line
我发现如果我通过转换为字符串来修改此行
logFilespec = "dotFile_names.txt"
fullLogFileSpec = []
userDesktop = os.path.join(os.path.expanduser('~'), 'Desktop')
fullLogFilespec = os.path.join(userDesktop, logFilespec)
try:
print "opening " + fullLogFilespec
fout = open(fullLogFileSpec, 'w')
for line in dotFile_names:
print "..", # are we executing this line..?
fout.write(line)
except IOError as e:
print ("Error : %s not found." % fout)
finally:
print "\nclosing " + fullLogFilespec
fout.close()
错误消失,但桌面上没有创建文件!
至少我猜我传递了一些无法识别的东西fout = open(fullLogFileSpec, 'w')
fout = open(str(fullLogFileSpec), 'w')
,但它没有被除外。然后当我传递似乎允许fout = open()工作的东西时,它似乎是一个幽灵?
所以我想我在String和os.path.expanduser()给我的任何类型的引用/指针之间丢失了。
我确信它非常简单。在添加str()代码之前,我还检查了所有缩进,删除所有缩进并使用编辑器缩进热键添加回来,以防万一以某种方式影响事物。
答案 0 :(得分:0)
fullLogFileSpec = []
作为列表而不是字符串是我的错误。
与它类似,在没有列表声明的情况下重写它,这段代码工作正常:
logfile_directory = os.path.join(os.path.expanduser('~'),'Desktop')
log_bf_file_spec = 'ItemsFoundByFolder_' + Deez_1.current_datetime() + '.txt'
log_by_folder = os.path.join(logfile_directory, log_bf_file_spec)
该函数稍后调用,没有错误:
fout_by_folder = open(log_by_folder, 'w')