python语法错误概述_Python 错误和异常代码详解
程序中的錯誤一般被稱為 Bug,無可否認(rèn),這幾乎總是程序員的錯。。。
程序員的一生,始終伴隨著一件事 - 調(diào)試(錯誤檢測、異常處理)。反反復(fù)復(fù),最可怕的是:不僅自己的要改,別人的也要改。。。一萬頭草泥馬奔騰而過!
錯誤
程序錯誤,主要分為三類:
語法錯誤
邏輯錯誤
運(yùn)行時錯誤
語法錯誤
語法錯誤(也稱:解析錯誤):是指不遵循語言的語法結(jié)構(gòu)引起的錯誤(程序無法正常編譯/運(yùn)行)。
在編譯語言(例如:C++)中,語法錯誤只在編譯期出現(xiàn),編譯器要求所有的語法都正確,才能正常編譯。不過對于直譯語言(例如:Python)來說,語法錯誤可能在運(yùn)行期才會出現(xiàn),而且不太容易區(qū)分語法錯誤及語義錯誤。
常見的 Python 語法錯誤有:
遺漏了某些必要的符號(冒號、逗號或括號)
關(guān)鍵字拼寫錯誤
縮進(jìn)不正確
空語句塊(需要用 pass 語句)
例如,編寫這樣一個條件判斷語句:
>>> if n < 5
File "", line 1
if n < 5
^
SyntaxError: invalid syntax
由于 if 語句中缺少一個冒號(:),不符合 Python 語法,因此程序無法正常運(yùn)行。
邏輯錯誤
邏輯錯誤(也稱:語義錯誤):是指程序的執(zhí)行結(jié)果與預(yù)期不符(程序可以正常運(yùn)行,不會 Crash)。
與語法錯誤不同的是,邏輯錯誤從語法上來說是正確的,但會產(chǎn)生意外的輸出或結(jié)果,并不一定會被立即發(fā)現(xiàn)。邏輯錯誤的唯一表現(xiàn)就是錯誤的運(yùn)行結(jié)果。
常見的邏輯錯誤有:
運(yùn)算符優(yōu)先級考慮不周
變量名使用不正確
語句塊縮進(jìn)層次不對
在布爾表達(dá)式中出錯
例如,要計算兩個數(shù)的平均值:
>>> def average(a, b):
... return a + b / 2 # 應(yīng)為 (a + b) / 2
...
>>>
雖然程序能夠正常運(yùn)行,但代碼中缺少括號,由于運(yùn)算符優(yōu)先級(先乘除,后加減)的緣故,運(yùn)算結(jié)果并不正確。
運(yùn)行時錯誤
運(yùn)行時錯誤:是指程序可以運(yùn)行,但是在運(yùn)行過程中遇到錯誤,導(dǎo)致意外退出。
當(dāng)程序由于運(yùn)行時錯誤而停止時,通常會說程序崩潰了。在 Python 中,這種運(yùn)行時錯誤被稱為異常。
Python 中的一些運(yùn)行時錯誤:
使用未定義的標(biāo)識符(NameError)
除數(shù)為 0(ZeroDivisionError)
打開的文件不存在(FileNotFoundError)
導(dǎo)入的模塊沒被找到(ImportError)
例如,除數(shù)為 0:
>>> 5 / 0
Traceback (most recent call last):
File "", line 1, in
ZeroDivisionError: division by zero
每當(dāng)出現(xiàn)這類運(yùn)行時錯誤時,Python 就會創(chuàng)建一個異常對象。如果處理不當(dāng),會輸出一個跟蹤(Traceback)到那個錯誤,以及關(guān)于為什么會出現(xiàn)錯誤的一些細(xì)節(jié)。
內(nèi)置異常的層次結(jié)構(gòu)
Python 中有許多內(nèi)置的異常,當(dāng)出現(xiàn)相應(yīng)的錯誤時,就會引發(fā)這些異常。
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StopAsyncIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
+-- ModuleNotFoundError
+-- LookupError
| +-- IndexError
| +-- KeyError
+-- MemoryError
+-- NameError
| +-- UnboundLocalError
+-- OSError
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +-- ConnectionAbortedError
| | +-- ConnectionRefusedError
| | +-- ConnectionResetError
| +-- FileExistsError
| +-- FileNotFoundError
| +-- InterruptedError
| +-- IsADirectoryError
| +-- NotADirectoryError
| +-- PermissionError
| +-- ProcessLookupError
| +-- TimeoutError
+-- ReferenceError
+-- RuntimeError
| +-- NotImplementedError
| +-- RecursionError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning
注意: 當(dāng)捕獲異常或者決定應(yīng)該繼承哪個異常類時,這個層次關(guān)系非常有用。
總結(jié)
以上就是本文關(guān)于Python 錯誤和異常代碼詳解的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
總結(jié)
以上是生活随笔為你收集整理的python语法错误概述_Python 错误和异常代码详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rcep是什么意思 区域全面经济伙伴关系
- 下一篇: 为什么python打包的应用那么大_浅谈