Why doesn't Python give any error when quotes around a string do not match?

I've started learning Python recently and I don't understand why Python behaves like this:

>>> "OK"
'OK'
>>> """OK"""
'OK'
>>> "not Ok'
  File "<stdin>", line 1
    "not Ok'
           ^
SyntaxError: EOL while scanning string literal
>>> "not OK"""
'not OK'

Why doesn't it give an error for the last statement as the number of quotes does not match?


The final """ is not recognized as a triple-quotation, but a single " (to close the current string literal) followed by an empty string ""; the two juxtaposed string literals are concatenated. The same behavior can be more readily recognized by putting a space between the closing and opening ".

>>> "not OK" ""
'not OK'

"not OK"""

Python interprets this as "not OK"+""

If you give "not Ok""ay", you will get the output as 'not Okay'


You would think that there is no difference between " or ', but in reality, Python uses a greedy method to accept input.

Once Python sees a matching quotation, then that ends the statement.

It's why you can write something like "'s" "". Inside the string there is a ' but because you're in a string, python doesn't raise an error. Then after that, there is a " followed by " but that's a different (empty) string.

If you do something like "s' then Python is looking for that next " before if runs your command.