簡體   English   中英

當字符串周圍的引號不匹配時,為什么 Python 不會給出任何錯誤?

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

我最近開始學習 Python,我不明白為什么 Python 會這樣:

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

由於引號的數量不匹配,為什么最后一條語句不會出錯?

最后的"""不被識別為三重引號,而是單個" (以關閉當前字符串文字) 后跟一個空字符串"" 兩個並列的字符串文字被連接起來。 通過在關閉和打開之間放置一個空格,可以更容易地識別相同的行為"

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

"not OK"""

Python 將其解釋為"not OK"+""

如果你給"not Ok""ay" ,你會得到輸出為'not Okay'

你會認為 " 或 ' 之間沒有區別,但實際上,Python 使用貪婪的方法來接受輸入。

一旦 Python 看到匹配的引用,語句就結束了。

這就是為什么你可以寫類似"'s" "" 在字符串中有一個'但因為你在一個字符串中,python 不會引發錯誤。 然后在那之后,有一個"后跟"但這是一個不同的(空)字符串。

如果您執行類似"s'那么 Python 會在 if 運行您的命令之前尋找下一個"

Python 使用堆棧實現來檢測引號的打開和關閉。 如果您知道堆棧是什么,那么它是一個數據結構,其中最后一個元素將首先被刪除。

假設你的字符串是A = "''"它的作用是,對於第一次遇到的每一個單引號或雙引號,它都會將它添加到堆棧中,並且每一秒,它都會從堆棧中移除,除非它當然, """將被解析為單個

在我們的示例中, A = "''"迭代,對於前 2 個元素,它們將被添加到堆棧中,對於接下來的 2 個元素,它們將被刪除。

所以引號將被匹配,當且僅當,堆棧中的元素數量最終必須為零

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM