f.open()问题导致f.close()

时间:2015-07-16 05:08:58

标签: file-io scope type-conversion try-catch pass-by-reference

我没有答案,但我正在缩小范围。不管怎样,我混淆/混淆类型,我相信,在'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()代码之前,我还检查了所有缩进,删除所有缩进并使用编辑器缩进热键添加回来,以防万一以某种方式影响事物。

1 个答案:

答案 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')