1

私は最初のマージソートプログラムを書き終えたところで、コンパイル時に問題が発生しています。私はこの特定のエラーについて多くの調査を行いましたが、コードのどこかで非特定的であるようです。私はまだ言われたエラーを見つけることができません、そしてあなたの助けを望みます。ファイルの内容、コード、およびトレースバックを添付しました。再度、感謝します。

ファイル:

999 Message C1 
1033 Message C2 
1054 Message C3 
1056 Message C4 
1086 Message C5

コード:

DEBUG = True
out = []

logs = open("C:\Users\----\Desktop\logs.txt", mode ="r")

lines = logs.readline()

def debug(s):
    if DEBUG:
        print "DEBUG: ", s

def get_t (line):
    s = line
    s = s.lstrip()
    debug(s)
    i = s.find(" ")
    debug(s)
    s = s[:i]
    return int(s)

def get_lowest_i(logs):
    lowest_i = -1
    for i in range(len(logs)):
        log = logs[i]
        debug("log=" + repr(log))
        if log:
            t = get_t(log[0])
            debug("t=" + repr(t))
            if lowest_i == -1 or t < lowest_t:
                lowest_i = i
                lowest_t = t
    return lowest_i

def get_line_lowest_t(logs):
    while True:
        i = get_lowest_i(logs)
        if i == -1:
            break
        line = logs[i].pop(0)

def mergesort(logs):
    while True:
        line = get_line_lowest_t(logs)
        if line == None:
            break
        out.append(line)
    return out

print mergesort(logs)

f.close()

トレースバック:

Traceback (most recent call last):
  File "<module1>", line 50, in <module>
  File "<module1>", line 44, in mergesort
  File "<module1>", line 37, in get_line_lowest_t
  File "<module1>", line 24, in get_lowest_i
TypeError: object of type 'file' has no len()

前もって感謝します。

4

3 に答える 3

1

ファイルにはメソッドlen()がありません。文字列または配列に入れてから、len()を使用します

于 2012-06-25T20:16:48.040 に答える
1

TypeError: object of type 'file' has no len()エラーは、ファイルオブジェクトの長さを読み取ろうとしていることをすべて示しています...それがファイルであるということlogs = open("C:\Users\----\Desktop\logs.txt", mode ="r")は、ファイルの行を読み取ってそれを並べ替えることを意味しているのかもしれません...lines = longs.readlines() print mergesort(lines)

于 2012-06-25T20:12:36.193 に答える
0

と呼ばれる配列ではなく、ファイルをマージソートしていますlines

于 2012-06-25T20:11:43.120 に答える