當前位置:編程學習大全網 - 編程語言 - 學生避坑Python容易犯的錯

學生避坑Python容易犯的錯

Python初學者易犯的6個錯誤新手避坑

Python中6個經典的新手錯誤

SyntaxError的來源

當您運行Python代碼時, 解釋器將首先解析它以將其轉換為

Python字節碼, 然後執行。解釋器將在程序執行的第壹階段

(也稱為解析階段) 中發現Python中的任何無效語法。如果

解釋器無法成功解析您的Python代碼, 則意味著您在代碼中

的某處使用了無效語法。解釋器將嘗試向您顯示該錯誤發生的

位置。

當您第壹次學習Python時, 遇到SyntaxError可能會令人沮

!喪。Python將嘗試幫助您確定代碼中無效語法的位置, 但它

提供的回溯可能有點令人困惑。有時,它指向的代碼非常好。

註意:如果您的代碼在語法上是正確的,那麽您可能會引發其

他不是SyntaxError的異常。

1.濫用賦值運算符(=)15

在Python中有幾種情況, 您無法對對象進行賦值。壹些示例

分配給文字和函數調用。在下面的代碼塊中,您可以看到壹些

嘗試執行此操作的示例, 以及由此產生的SyntaxError回溯:

Python中6個經典的新手錯誤

>>>len('hello*) = 5

File"estd in>", line 1

SyntaxError:can'tassigntofunctioncall

>>>*foo°m 1

File“estd in>", line 1

SyntaxError:can'tassigntoliteral

) >1m'foo’

File"estd in>", line 1

SyntaxError:can'tassigntoliteral

第壹個示例嘗試將值5分配給len() 調用。SyntaxError消息

在這種情況下非常有用。它告訴妳不能給函數調用賦值。

第二個和第三個示例嘗試為文字分配壹個字符串和壹個整數。

相同的規則適用於其他文字值。回溯消息再次表明當您嘗試為

文字賦值時出現問題。

您的意圖很可能不是為文字或函數調用分配值。例如,如果您

不小心遺漏了額外的等號(=),就會發生這種情況,這會將賦

值轉換為比較。如下所示,比較是有效的:

>>>len('hello') == 5

True

2.拼寫錯誤、遺漏或誤用Python關鍵字

Python中6個經典的新手錯誤

Python關鍵字是壹組受保護的詞, 在Python中具有特殊含

義。這些詞不能用作代碼中的標識符、變量或函數名稱。它們

是語言的壹部分, 只能在Python允許的上下文中使用。

|錯誤使用關鍵字的常見方式有以下三種:

①關鍵字拼寫錯誤;

②缺少關鍵字;

③濫用關鍵字;

如果您在Python代碼中拼錯了關鍵字, 則會收到

SyntaxError。例如, 如果關鍵字for拼寫錯誤, 會發生以下

情況:

>>>fro i in range(18) :

File“<stdin>", line 1

fro i in range(10) :

SyntaxError:invalid syntax

該消息顯示SyntaxError:invalid syntax, 但這不是很有幫助

。回溯指向Python可以檢測到錯誤的第壹個位置。要修復此

類錯誤, 請確保所有Python關鍵字拼寫正確。

關鍵字的另壹個常見問題是當您完全忘記寫時:

Python中6個經典的新手錯誤

>>>for i range(18) :

File“<stdin>", line 1

for i range(18) :

SyntaxError:invalid syntax

再壹次,異常消息並沒有那麽有用,但回溯確實會嘗試為您指

明正確的方向。如果從插入符號中移回, 則可以看到for循環

語法中缺少in關鍵字。

您還可以濫用受保護的Python關鍵字。請記住, 關鍵字只允

許在特定情況下使用。如果您錯誤地使用它們,那麽您的

Python代碼中將包含無效的語法。壹個常見的例子是在循環

外使用continue或break。這很容易在開發過程中發生, 當

您正在實現事物並碰巧將邏輯移到循環之外時:

>names m['pam', 'jin', *michael']

if'jim'in nanes:

print(*jim found')

break

File“estd in>", line 3

SyntaxError:'break'outside loop

s>if'jim'in nanes:

print(*jin found')

continue

File“estd in", line 3

SyntaxError:'continue'not properly in loop

Python中6個經典的新手錯誤

在這裏, Python可以很好地告訴您究竟出了什麽問題。消息

“'break'外循環”和“continue'未正確循環”可幫助您確

定要做什麽。如果這段代碼在壹個文件中, 那麽Python也會

有指向誤用關鍵字的插入符號。

另壹個示例是, 如果您嘗試將Python關鍵字分配給變量或使

用關鍵字來定義函數:

>>>pass=True

File“estd in>", line 1

pass=True

SyntaxError:invalid syntax

>>>def pass() :

File"estd in>", line 1

def pass() :

SyntaxError:invalid syntax

3.Python中6個經典的新手錯誤

通常, Python代碼中無效語法的原因是缺少或不匹配的右括

號、方括號或引號。這些在很長的嵌套括號行或更長的多行塊

中很難發現。借助Python的回溯, 您可以發現不匹配或丟失

的引號:

>message-*don't

File“<stdin>", line 1

message='don't'

SyntaxError:invalid syntax

Python中6個經典的新手錯誤

在這裏,回溯指向無效代碼,其中在結束單引號之後有壹個t'

。要解決此問題,您可以進行以下兩項更改之壹

①用反斜杠轉義單引號('don't') ;

②用雙引號將整個字符串括起來("don't") ;

另壹個常見的錯誤是忘記關閉字符串。對於雙引號和單引號字

符串,情況和回溯是相同的:

>>>message="This is an unclosed string

File“<stdin>", line 1

message-“This is an unclosed string

SyntaxError:EOL while scanning string literal

4.錯誤的字典語法

您之前看到,如果您將逗號放在字典元素之外,您可能會得到

SyntaxError。Python字典的另壹種無效語法形式是使用等號

(=)來分隔鍵和值,而不是使用冒號:

>>>ages·{'pam'-24}

File“<stdin>", line 1

ages-{'pam'-24}

SyntaxError:invalid syntax

同樣,此錯誤消息不是很有幫助。然而,重復的行和插入符號

非常有幫助!他們直指問題人物。

Python中6個經典的新手錯誤

>>>ages=dict(pam=24)

>>>ages

{'pam':24}

如果您將Python語法與其他編程語言的語法混淆, 則此類問

題很常見。如果您將定義字典的行為與dict() 調用混淆, 您也

會看到這壹點。要解決此問題,您可以用冒號替換等號。您還

可以切換到使用dict) :

5.使用錯誤的縮

其他編程語言使用花括號表示代碼塊, 而Python使用空格。

這意味著Python期望代碼中的空白行為可預測。如果代碼塊

中的壹行包含錯誤的空格數, 它將引發Indentation Error:

這可能很難看到, 但第5行僅縮進了2個空格。應該和for循

f foo() :

for i in range(10) :

print(i)

print('done')

foo()

環語句壹致, 多4個空格。值得慶幸的是, Python可以很容易

地發現這壹點,並會很快告訴您問題所在。

不過, 這裏也有壹些歧義。print('done') 行是在for循環之後

還是在for循環塊內?當妳運行上面的代碼時, 妳會看到以下

錯誤:

Python中6個經典的新手錯誤

File“indentation.py", line 5

print('done*)

Indentation Error:un indent does not match any outer indentation level

盡管回溯看起來很像SyntaxError回溯, 但它實際上是壹個

進級別與任何其他縮進級別都不匹配。換句話說,

Indentation Error。錯誤信息也很有幫助。它告訴您該行的縮

print('done') 被縮進了2個空格, 但是Python找不到任何其

他符合這種縮進級別的代碼行。您可以通過確保代碼與預期的

縮進級別對齊來快速解決此問題。

6.定義和調用函數

SyntaxError:

>>>def fun O;

File“estd in>", line 1

def fun() ;

SyntaxError:invalid syntax

這裏的回溯非常有用,插入符號直接指向問題字符。您可以通

過將分號替換為冒號來清除Python中的這種無效語法。

此外,函數定義和函數調用中的關鍵字參數都需要按正確的順

在定義或調用函數時, 您可能會在Python中遇到無效語法。

例如,如果在函數定義的末尾使用分號而不是冒號,則會看到

Python中6個經典的新手錯誤

序排列。關鍵字參數總是在位置參數之後。不使用此順序將導

致SyntaxError:

>>>def fun(a, b) :

print(a, b)

mmm

>>>fun(a-1, 2)

File“<stdin>", line 1

SyntaxError:positional argument follows keyword argument

  • 上一篇:單反已成過去式,無反相機大勢已成,未來更將因人工智能而爆發
  • 下一篇:手機JAVA是怎麽回事?
  • copyright 2024編程學習大全網