str.startswith() not working as I intended

前端 未结 5 1194
滥情空心
滥情空心 2021-01-29 11:13

I can\'t see why this won\'t work. I am performing lstrip() on the string being passed to the function, and trying to see if it starts with \"\"\". For some reason, it gets caug

相关标签:
5条回答
  • 2021-01-29 11:34

    You haven't provided and exit path from the recursive loop. A return statement should do the trick.

        (...)
        while True:
            if line.rstrip().endswith('"""'):
                line = infile.readline()
                return find_comment(infile, line)
            else:
                line = infile.readline()
    
    0 讨论(0)
  • 2021-01-29 11:34
    not line_t.startswith('"""') or not line_t.startswith('#')
    

    This expression evaluates to True no matter what string line_t denotes. Do you want 'and' instead of 'or'? Your question isn't clear to me.

    0 讨论(0)
  • 2021-01-29 11:37

    while True is an infinite loop. You need to break once you're done.

    0 讨论(0)
  • 2021-01-29 11:41

    As long as lines start or end with a comment, the code below should work.

    However, keep in mind that the docstrings can start or end in the middle of a line of code.

    Also, you'll need to code for triple single-quotes as well as docstrings assigned to variables which aren't really comments.

    Does this get you closer to an answer?

    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,
    
    0 讨论(0)
  • 2021-01-29 11:43
    if not line_t.startswith('"""') or not line_t.startswith('#'):
    

    This if will always be satisfied -- either the line doesn't start with """, or it doesn't start with # (or both). You probably meant to use and where you used or.

    0 讨论(0)
提交回复
热议问题