多文件流问题

Multiple File Stream Issue

在我的项目中,我在整个过程中使用了 3 个文件。源文件 (.ada)、一个 "three address code" 文件 (.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 应该打开该文件以进一步处理它,但出于某种原因并没有发生。

这可能特定于我的情况,但我发现问题是由于我使用这些流的顺序和方式造成的。

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

from Called import post_process_file_handler

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

将导入行移到我使用该函数之前解决了我的问题,因为 Called.py 中的任何内容都不会初始化,直到 Caller.py 完成其工作。