1

このコードを実行しようとするときはいつでも:

    #Open file
    f = open("i.txt", "r")
    line = 1

    #Detect start point
    def findstart( x ):
        length = 0
        epsilon = 7
        a = 3
        line_value = int(f.readline(x))
        if line_value == a:
            length = length + 1
            x = x + 1
            findend(x)
        elif line_value == epsilon:
            x = x + 2
            findstart(x)
        else:
            x = x + 1
            findstart(x)

    #Detect end point
    def findend(x):
        line_value = int(f.readline(x))
        if line_value == a:
            length = length + 1
            return ("Accept", length)
        elif line_value == epsilon:
            x = x + 2
            length = length + 2
            findend(x)
        else:
            x = x + 1
            length = length + 1
            findend(x)

    findstart(line)

このエラーコードが表示されます:

    Traceback (most recent call last):
  File "C:\Users\Brandon\Desktop\DetectSequences.py", line 39, in <module>
    findstart(line)
  File "C:\Users\Brandon\Desktop\DetectSequences.py", line 16, in findstart
    findend(x)
  File "C:\Users\Brandon\Desktop\DetectSequences.py", line 26, in findend
    line_value = int(f.readline(x))
    ValueError: invalid literal for int() with base 10: ''

誰かが私が何が悪いのかを理解するのを手伝ってもらえますか?空のセルを読み取ろうとしているように見えますが、なぜそうなるのかわかりません。私がスキャンしているファイルは現在2行しかなく、それぞれが「3」を示しているので、成功するはずですが、このエラーを乗り越えることはできません。

4

3 に答える 3

2

コードについてはよくわかりませんが、エラーメッセージは、ファイルに空の行が含まれていて、ファイルをに変換しようとしていることを示していintます。たとえば、多くのテキストファイルの最後に空の行があります。

変換する前に、まず行を確認することをお勧めします。

line = ...
line = line.strip() # strip whitespace
if line: # only go on if the line was not blank
    line_value = int(line)
于 2011-11-01T23:48:54.887 に答える
1

あなたは空白行を読んでいます、そしてPythonはそれを好きではありません。おそらく空白行をチェックしているはずです。

line_value = f.readline(x).strip()
if len(line_value) > 0:
    line_value = int(line_value)
    ...
于 2011-11-01T23:48:32.567 に答える
1

変数a、length、およびイプシロンにスコープの問題があります。findstartで定義しますが、findendでアクセスしてみてください。

また、readlineに渡される変数xは、あなたが思っていることをしていません。Readlineは常にファイル内の次の行を返します。それに渡される変数は、行の長さのオプションのヒントであり、どの行を読み取るかではありません。特定の行を操作するには、最初にファイル全体をリストに読み込みます。

# Read lines from file
with open("i.txt", "r") as f:
    # Read lines and remove newline at the end of each line
    lines = [l.strip() for l in f.readlines()]

    # Remove the blank lines
    lines = filter(lambda l: l, lines)

EPSILON = 7
A = 3
length = 0

#Detect start point
def findstart( x ):
    global length

    length = 0

    line_value = int(lines[x])
    if line_value == A:
        length += 1
        x += 1
        findend(x)
    elif line_value == EPSILON:
        x += 2
        findstart(x)
    else:
        x += 1
        findstart(x)

#Detect end point
def findend(x):
    global length

    line_value = int(lines[x])
    if line_value == A:
        length += 1
        return ("Accept", length)
    elif line_value == EPSILON:
        x += 2
        length += 2
        findend(x)
    else:
        x += 1
        length += 1
        findend(x)

findstart(0)
于 2011-11-02T00:09:29.633 に答える