在我的项目中,我在整个过程中使用了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应该打开该文件以进一步处理它,原因是没有发生。
答案 0 :(得分:0)
这可能与我的情况有关,但我发现问题是由于我使用这些流的顺序和方式。
简而言之,遇到导入行时:
from Called import post_process_file_handler
它触发了某种初始化,并且由于文件指针是Called.py中的全局变量,因此在Caller.py有机会创建它将读取的.TAC文件之前对其进行了初始化。
将导入行移至我使用该函数之前修复了我的问题,因为在Caller.py完成其工作之前,Called.py中的任何内容都未初始化。