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.