-1

なぜこれが機能しないのかわかりません。関数に渡される文字列に対してlstrip()を実行し、「」で始まるかどうかを確認しようとしています。何らかの理由で、無限ループに陥ります。

def find_comment(infile, line):

    line_t = line.lstrip()
    if not line_t.startswith('"""') and not line_t.startswith('#'):
        print (line, end = '')
        return line

    elif line.lstrip().startswith('"""'):
            while True:
                if line.rstrip().endswith('"""'):
                    line = infile.readline()
                    find_comment(infile, line)
                else:
                    line = infile.readline()
    else:
        line = infile.readline()
        find_comment(infile, line)

そして私の出力:

Enter the file name: test.txt
import re
def count_loc(infile):

これが私が参考のために読んでいるファイルのトップです:

    import re

    def count_loc(infile):
        """ Receives a file and then returns the amount
            of actual lines of code by not counting commented
            or blank lines """

        loc = 0
        func_records = {}
        for line in infile:
        (...)
4

5 に答える 5

4

再帰ループからパスを指定して終了していません。returnステートメントでうまくいくはずです。

    (...)
    while True:
        if line.rstrip().endswith('"""'):
            line = infile.readline()
            return find_comment(infile, line)
        else:
            line = infile.readline()
于 2009-05-30T06:57:19.507 に答える
2

while True無限ループです。break終わったらする必要があります。

于 2009-05-30T06:49:50.253 に答える
1
not line_t.startswith('"""') or not line_t.startswith('#')

この式は、文字列line_tが何を示していても、Trueと評価されます。'または'の代わりに'と'が必要ですか?あなたの質問は私にはわかりません。

于 2009-05-30T06:32:59.960 に答える
1
if not line_t.startswith('"""') or not line_t.startswith('#'):

これifは常に満たされます-行がで始まらないか、"""で始まらない#(または両方)。おそらく、使用しandた場所を使用するつもりorでした。

于 2009-05-30T06:37:58.280 に答える
1

行がコメントで開始または終了している限り、以下のコードが機能するはずです。

ただし、docstringはコード行の途中で開始または終了する可能性があることに注意してください。

また、実際にはコメントではない変数に割り当てられたdocstringだけでなく、トリプルシングルクォートをコーディングする必要があります。

これで答えに近づきますか?

def count_loc(infile):
  skipping_comments = False
  loc = 0 
  for line in infile:
    # Skip one-liners
    if line.strip().startswith("#"): continue
    # Toggle multi-line comment finder: on and off
    if line.strip().startswith('"""'):
      skipping_comments = not skipping_comments
    if line.strip().endswith('"""'):
      skipping_comments = not skipping_comments
      continue
    if skipping_comments: continue
    print line,
于 2009-05-30T07:01:10.747 に答える