多文件流问题

时间:2017-04-28 23:38:44

标签: python file-io python-module

在我的项目中,我在整个过程中使用了3个文件。源文件(.ada),“三地址代码”文件(.TAC),以及我自己的临时文件,供处理期间使用(.TACTMP)。

在Caller.py中:

TACFILE = open(str(sys.argv[1])[:-4] + ".TAC", 'w') # line 17
# Does a bunch of stuff
TACFILE.close() # line 653
# the below function is imported from Called.py
post_process_file_handler() # line 654

在Called.py中:

TAC_FILE_NAME = str(sys.argv[1])[:-4] # line 6
TAC_lines = open(TAC_FILE_NAME + ".TAC", 'r').readlines() # line 7

如果我尝试运行我的程序而没有(即使它是空白的).TAC文件,我将收到以下错误:

Traceback (most recent call last):
  File "Caller.py", line 8, in <module>
    from Called import post_process_file_handler
  File "Called.py", line 7, in <module>
    TAC_lines = file(TAC_FILE_NAME + ".TAC", 'r').readlines()
IOError: [Errno 2] No such file or directory: 'test76.TAC'

为什么会这样?即使我在Caller.py的开头放置一个断点,也就是在调用post_process_file_handler()函数之前,这个错误就被抛出了。

为清楚起见:test76.TAC应该由Caller.py生成,然后Called.py应该打开该文件以进一步处理它,原因是没有发生。

1 个答案:

答案 0 :(得分:0)

这可能与我的情况有关,但我发现问题是由于我使用这些流的顺序和方式。

简而言之,遇到导入行时:

from Called import post_process_file_handler

它触发了某种初始化,并且由于文件指针是Called.py中的全局变量,因此在Caller.py有机会创建它将读取的.TAC文件之前对其进行了初始化。

将导入行移至我使用该函数之前修复了我的问题,因为在Caller.py完成其工作之前,Called.py中的任何内容都未初始化。