使用三引号注释引发Python程序IndentationError的原因与解决方法
Question:
I ran into an issue when adding comments to my code: after using a triple-quoted string (""" or ''') as a comment, my program crashes with an IndentationError: unexpected indent error. But when I comment out that triple-quoted block with #, the program runs fine. What causes this error, and how can I fix it?
Here's the problematic code:
#This programs show that comments using # rather than """ """ def main(): print("let's do something") #Try using hashtag to comment this block to get code working ''' Note following block gives you a non-sense indent error The next step would be to consider how to get all the words from spam and ham folder from different directory. My suggestion would be do it twice and then concentrate two lists Frist think about the most efficient way For example, we might need to get rid off the duplicated words in the beginning The thoughts of writing the algorithem to create the dictionary Method-1: 1. To append all the list from the email all-together 2. Eliminate those duplicated words cons: the list might become super large I Choose method-2 to save the memory Method-2: 1. kill the duplicated words in each string 2. Only append elements that is not already in the dictionary Note: 1. In this case, the length of feature actually was determined by the training cohorts, as we used the different English terms to decide feature cons: the process time might be super long ''' def wtf_python(var1, var2): var3 = var1 + var2 + (var1*var2) return var3 wtfRst1 = wtf_python(1,2) wtfRst2 = wtf_python(3,4) rstAll = { "wtfRst1" : wtfRst1, "wtfRst2" : wtfRst2 } return(rstAll) if __name__ == "__main__": mainRst = main() print("wtfRst1 is :\n", mainRst['wtfRst1']) print("wtfRst2 is :\n", mainRst['wtfRst2'])
Answer:
Let’s break this down in plain terms:
Why the error happens
Triple-quoted strings ('''/""") are not real comments in Python. They’re multi-line string literals—meaning Python treats them as valid code (even if you don’t assign them to a variable) and checks their indentation just like any other line of code.
In your main() function, all code is indented to match the function’s level. But the lines inside your triple-quoted block start at the leftmost column (no indentation). Python sees this as a mismatch: it expects code inside main() to stay indented, so the unindented lines in the string trigger the IndentationError.
When you wrap the whole block with #, Python ignores every line entirely—so indentation doesn’t matter anymore.
How to fix it
You’ve got a few solid options depending on what you need:
Use real line comments with
#(best for temporary notes)
Convert each line of your triple-quoted block to start with#. This makes them true comments that Python will ignore, and you just need to keep the#aligned with the rest of the function’s code:# Note following block gives you a non-sense indent error # The next step would be to consider how to get all the words from spam and ham folder from different directory. # My suggestion would be do it twice and then concentrate two lists # ... (rest of your commented lines)Align the triple-quoted string’s indentation
If you want to keep the multi-line string (maybe as a placeholder or draft), make sure every line inside the triple quotes matches the indentation of themain()function:''' Note following block gives you a non-sense indent error The next step would be to consider how to get all the words from spam and ham folder from different directory. My suggestion would be do it twice and then concentrate two lists ... (rest of the lines indented properly) '''Just keep in mind: this string will take up memory when the code runs, unlike
#comments.Turn it into a docstring if it’s documentation
If this block is meant to document the function, move it to the very top ofmain()(right after thedefline)—that’s where Python expects docstrings (triple-quoted strings used for documentation):def main(): ''' This function runs core logic and returns calculated results. (your full documentation here) ''' print("let's do something") # rest of the code
内容的提问来源于stack exchange,提问作者CuteMeowMeow




