程序不继续读取文本文件

Program doesn't continue reading text file

我要读取数据表格文件a_flag 所以我在这里有功能

def get_answer():
    print("Creating r_flag data... ", end="")
    r_flag = Flag(open("request.flg", "r+"))
    print("Done")
    print("Creating a_flag data... ", end="")
    a_flag = Flag(open("answer.flg", "r+"))
    print("Done")
    print("Creating b_flag data... ", end="")
    b_flag = Flag(open("busy.flg", "r+"))
    print("Done")

    # Wait until ready
    print("Getting b_flag data... ", end="")
    b_flag.get_data()
    while b_flag.buffer[1] == 3:
        b_flag.get_data()
    print("Done")
    # Request data
    print("Set r_flag to REQUESTED... ", end="")
    r_flag.set_stat([0, 0, 0, 0, 0, 0, 0, 0])
    print("Done")
    print("Now enter looping... ", end="")

    while True:
        print("Done")
        print("  Getting a_flag data... ")
        a_flag.get_data()
        print("    got --> " + a_flag.buffer)
        print("  Getting r_flag data... ")
        r_flag.get_data()
        print("    got --> " + r_flag.buffer)
        if a_flag.is_answered() and r_flag.buffer:
            print("Set r_flag to ACQUIRED... ", end="")
            r_flag.set_stat([0, 2, 0, 0, 0, 0, 0, 0])
            print("Done")
            buffer = a_flag.buffer
            del r_flag
            del a_flag
            del b_flag
            print("Returning buffer")
            return buffer

这是它的输出

Got a request: stat
Creating r_flag data... Done
Creating a_flag data... Done
Creating b_flag data... Done
Getting b_flag data... Done
Set r_flag to REQUESTED... Done
Now enter looping... Done
  Getting a_flag data...

如您所见,它不处理 pass a_flag.get_data(),其定义如下

class Flag():

    def __init__(self, f):
        self.flag_f = f

    def __del__(self):
        self.flag_f.close()

    def get_data(self):
        self.rewind()
        self.buffer = self.flag_f.readline().split()
        return self.buffer

    def set_stat(self, data):
        self.rewind()
        for i in range(0, 8):
            self.flag_f.write("{0} ".format(data[i], end=""))

    def rewind(self):
        self.flag_f.seek(0)

我完全不知道问题出在哪里(请注意,它使用相同的函数正确地从 b_flag 中获取了数据)

answer.flg

0 1 0 0 0 0 0 0

busy.flg

1 4 0 0 0 0 0 0 

request.flg

0 0 0 0 0 0 0 0 

请耐心等待我的代码

如果我 运行 你的代码,我得到以下错误,它立即揭示了问题:

TypeError                                 Traceback (most recent call last)
<ipython-input-22-85d0a94e893a> in <module>
----> 1 get_answer()

<ipython-input-7-753bd9beab41> in get_answer()
     26         print("  Getting a_flag data... ")
     27         a_flag.get_data()
---> 28         print("    got --> " + a_flag.buffer)
     29         print("  Getting r_flag data... ")
     30         r_flag.get_data()

TypeError: must be str, not list

将语句更改为例如print(" got --> " + str(a_flag.buffer)) 会处理这个问题,即使它不是唯一一个有代码的人:稍后你必须对 r_flag 做同样的事情,即使那样,你也会 运行 进入您在 Flag 上使用 is_answered 的问题,该问题不存在。