2009-09-09 171 views
5

字符串列表爲什麼地球上沒有解釋提高的SyntaxError每次我這樣做:問題與蟒蛇

my_abc = ['a', 
      'b', 
      'c' 
      'd',] 

我只是想補充「C」,以字符串列表,忘了追加逗號。我希望這會導致某種錯誤,因爲它是不正確的。

相反,我得到了什麼:

>>> my_abc 
['a', 'b', 'cd'] 

這是從未我想要的東西。

爲什麼會自動連接?我很難指望我被這種行爲咬了多少次。 我能用它做什麼嗎?

只是澄清*:我並不介意自動連接,我的問題只能處理字符串列表,因爲它們通常不僅僅是攜帶文本,而是用來控制流,通過字段名稱和其他許多事情。

回答

2

正如其他人所說,這是由設計。

這是爲什麼?主要是出於歷史原因:C也做到了。

在某些情況下,它很方便,因爲它減少了合成噪聲並避免添加不需要的空間(內聯SQL查詢,複合正則表達式等)。

你可以做些什麼呢?不多,但如果真的發生在你身上,請嘗試以下技巧之一。

  • 在行首開始縮進列表中的昏迷狀態。這很奇怪,但如果你這樣做,失蹤的昏迷變得明顯。
  • 將字符串賦值給變量並在變量列表中使用變量列表(通常是其他原因的好主意,如避免重複字符串)。
  • 拆分您的列表:對於列表中的單詞,您可以將整個列表放在一個字符串中,並像下面那樣拆分它。對於超過5個元素,它也更短。

    'a b c d e'.split('')。

+1

或者在每個項目(包括最後一個項目)後面加一個逗號;解釋器允許使用額外的逗號,這樣,如果您將列表設置爲每行一個值並將項目向上移動或你不會遇到這個問題 – 2009-09-09 21:41:11

+1

這似乎是什麼原始問題海報(和臨屋區這也是我通常爲你剛剛說的原因所做的),但是在線末端遺漏的昏迷很容易被忽視。我也遇到了相反的問題:行結尾的尾部昏迷將常量變爲元組。我相信這個人比其他人更難發現:-( – kriss 2009-09-09 21:54:45

+0

接受盡力而爲;] – kurczak 2009-09-23 10:21:18

6

這是設計。例如,它允許在不使用+的情況下在多行中編寫長字符串文字。

+1

我寧願使用「」「爲multilne字符串或以'\'明確地打破他們,不是比這種*魔法*串聯。 – kurczak 2009-09-09 19:45:32

+0

‘’」把行間換行。 – recursive 2009-09-09 19:52:54

+0

這不是「魔術」。這是很好的記錄:http://docs.python.org/reference/lexical_analysis.html#string-literal-concatenation – 2009-09-09 20:06:48

3

由於兩個字符串並排,由空白分隔,連接在一起。由於字符串在列表中,因此它們是「並排」的。

參見:http://docs.python.org/reference/lexical_analysis.html#string-literal-concatenation

+0

不知道爲什麼這是downvoted。我在某些方面不正確? – 2009-09-09 19:45:32

+0

問題是*爲什麼*。你只是簡單地重申了OP所發生的事情,OP已經在他的帖子中發表了。如果問題問「爲什麼10 * 2 = 20」,答案「因爲10 * 2 = 20」沒有幫助。 – 2009-09-09 19:49:15

+0

_why_在文檔中解釋 - 它是通過設計和用例。 。 – 2009-09-09 19:50:39

2

因爲人們往往希望做這樣的事情:

line = ("Here's a very long line, with no line breaks," 
     " which should be displayed to the user (perhaps" 
     " as an error message or question box).") 

它更容易寫,而不必手動連接字符串。 C,C++和(我相信)Java和C#也有這種行爲。

+0

「」」不這樣做它插入新行 – recursive 2009-09-09 19:53:39

+4

@kurczak:40多年的開發商不同意你 – 2009-09-09 19:54:11

+0

@約翰米利請詳細說明,因爲 – kurczak 2009-09-09 20:22:31