欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 錯(cuò)誤和異常代碼詳解

 更新時(shí)間:2018年01月29日 12:24:36   作者:一去丶二三里  
這篇文章主要介紹了Python 錯(cuò)誤和異常代碼詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下

程序中的錯(cuò)誤一般被稱為 Bug,無(wú)可否認(rèn),這幾乎總是程序員的錯(cuò)。。。

程序員的一生,始終伴隨著一件事 - 調(diào)試(錯(cuò)誤檢測(cè)、異常處理)。反反復(fù)復(fù),最可怕的是:不僅自己的要改,別人的也要改。。。一萬(wàn)頭草泥馬奔騰而過(guò)!

錯(cuò)誤

程序錯(cuò)誤,主要分為三類:

  • 語(yǔ)法錯(cuò)誤
  • 邏輯錯(cuò)誤
  • 運(yùn)行時(shí)錯(cuò)誤

語(yǔ)法錯(cuò)誤

語(yǔ)法錯(cuò)誤(也稱:解析錯(cuò)誤):是指不遵循語(yǔ)言的語(yǔ)法結(jié)構(gòu)引起的錯(cuò)誤(程序無(wú)法正常編譯/運(yùn)行)。
在編譯語(yǔ)言(例如:C++)中,語(yǔ)法錯(cuò)誤只在編譯期出現(xiàn),編譯器要求所有的語(yǔ)法都正確,才能正常編譯。不過(guò)對(duì)于直譯語(yǔ)言(例如:Python)來(lái)說(shuō),語(yǔ)法錯(cuò)誤可能在運(yùn)行期才會(huì)出現(xiàn),而且不太容易區(qū)分語(yǔ)法錯(cuò)誤及語(yǔ)義錯(cuò)誤。

常見的 Python 語(yǔ)法錯(cuò)誤有:

  • 遺漏了某些必要的符號(hào)(冒號(hào)、逗號(hào)或括號(hào))
  • 關(guān)鍵字拼寫錯(cuò)誤
  • 縮進(jìn)不正確
  • 空語(yǔ)句塊(需要用 pass 語(yǔ)句)

例如,編寫這樣一個(gè)條件判斷語(yǔ)句:

>>> if n < 5
 File "<stdin>", line 1
  if n < 5
      ^
SyntaxError: invalid syntax

由于 if 語(yǔ)句中缺少一個(gè)冒號(hào)(:),不符合 Python 語(yǔ)法,因此程序無(wú)法正常運(yùn)行。

邏輯錯(cuò)誤

邏輯錯(cuò)誤(也稱:語(yǔ)義錯(cuò)誤):是指程序的執(zhí)行結(jié)果與預(yù)期不符(程序可以正常運(yùn)行,不會(huì) Crash)。
與語(yǔ)法錯(cuò)誤不同的是,邏輯錯(cuò)誤從語(yǔ)法上來(lái)說(shuō)是正確的,但會(huì)產(chǎn)生意外的輸出或結(jié)果,并不一定會(huì)被立即發(fā)現(xiàn)。邏輯錯(cuò)誤的唯一表現(xiàn)就是錯(cuò)誤的運(yùn)行結(jié)果。

常見的邏輯錯(cuò)誤有:

  • 運(yùn)算符優(yōu)先級(jí)考慮不周
  • 變量名使用不正確
  • 語(yǔ)句塊縮進(jìn)層次不對(duì)
  • 在布爾表達(dá)式中出錯(cuò)

例如,要計(jì)算兩個(gè)數(shù)的平均值:

>>> def average(a, b):
...   return a + b / 2 # 應(yīng)為 (a + b) / 2
... 
>>> 

雖然程序能夠正常運(yùn)行,但代碼中缺少括號(hào),由于運(yùn)算符優(yōu)先級(jí)(先乘除,后加減)的緣故,運(yùn)算結(jié)果并不正確。

運(yùn)行時(shí)錯(cuò)誤

運(yùn)行時(shí)錯(cuò)誤:是指程序可以運(yùn)行,但是在運(yùn)行過(guò)程中遇到錯(cuò)誤,導(dǎo)致意外退出。
當(dāng)程序由于運(yùn)行時(shí)錯(cuò)誤而停止時(shí),通常會(huì)說(shuō)程序崩潰了。在 Python 中,這種運(yùn)行時(shí)錯(cuò)誤被稱為異常。

Python 中的一些運(yùn)行時(shí)錯(cuò)誤:

  • 使用未定義的標(biāo)識(shí)符(NameError)
  • 除數(shù)為 0(ZeroDivisionError)
  • 打開的文件不存在(FileNotFoundError)
  • 導(dǎo)入的模塊沒(méi)被找到(ImportError)

例如,除數(shù)為 0:

>>> 5 / 0
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

每當(dāng)出現(xiàn)這類運(yùn)行時(shí)錯(cuò)誤時(shí),Python 就會(huì)創(chuàng)建一個(gè)異常對(duì)象。如果處理不當(dāng),會(huì)輸出一個(gè)跟蹤(Traceback)到那個(gè)錯(cuò)誤,以及關(guān)于為什么會(huì)出現(xiàn)錯(cuò)誤的一些細(xì)節(jié)。

內(nèi)置異常的層次結(jié)構(gòu)

Python 中有許多內(nèi)置的異常,當(dāng)出現(xiàn)相應(yīng)的錯(cuò)誤時(shí),就會(huì)引發(fā)這些異常。

Built-in Exceptions 中,有一個(gè)內(nèi)置異常的完整層次結(jié)構(gòu):

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)該繼承哪個(gè)異常類時(shí),這個(gè)層次關(guān)系非常有用。

總結(jié)

以上就是本文關(guān)于Python 錯(cuò)誤和異常代碼詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • python通過(guò)socket查詢whois的方法

    python通過(guò)socket查詢whois的方法

    這篇文章主要介紹了python通過(guò)socket查詢whois的方法,涉及Python基于socket模塊進(jìn)行查詢的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • python 消除 futureWarning問(wèn)題的解決

    python 消除 futureWarning問(wèn)題的解決

    今天小編就為大家分享一篇python 消除 futureWarning問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python使用whisper實(shí)現(xiàn)語(yǔ)音識(shí)別(ASR)的示例代碼

    Python使用whisper實(shí)現(xiàn)語(yǔ)音識(shí)別(ASR)的示例代碼

    Whisper是OpenAI的一個(gè)強(qiáng)大的語(yǔ)音識(shí)別庫(kù),支持離線的語(yǔ)音識(shí)別,本文主要介紹了Python使用whisper實(shí)現(xiàn)語(yǔ)音識(shí)別(ASR)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • python版本單鏈表實(shí)現(xiàn)代碼

    python版本單鏈表實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了python版本單鏈表實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Django學(xué)習(xí)教程之靜態(tài)文件的調(diào)用詳解

    Django學(xué)習(xí)教程之靜態(tài)文件的調(diào)用詳解

    這篇文章主要給大家介紹了關(guān)于Django學(xué)習(xí)教程之靜態(tài)文件調(diào)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • python迭代器實(shí)例簡(jiǎn)析

    python迭代器實(shí)例簡(jiǎn)析

    這篇文章主要介紹了python迭代器,以一個(gè)簡(jiǎn)單實(shí)例的形式分析了Python中迭代器的用法及注意事項(xiàng),需要的朋友可以參考下
    2014-09-09
  • 用Python快速讀取Excel數(shù)據(jù)

    用Python快速讀取Excel數(shù)據(jù)

    嘿,想學(xué)會(huì)用Python快速讀取Excel數(shù)據(jù)嗎?不用擔(dān)心,這個(gè)指南將帶你輕松掌握這項(xiàng)技能,讓我們一起開始吧!
    2023-12-12
  • python怎么自定義捕獲錯(cuò)誤

    python怎么自定義捕獲錯(cuò)誤

    在本篇文章里小編給大家分享了關(guān)于python自定義捕獲錯(cuò)誤的方法,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • 詳解Python并發(fā)編程之從性能角度來(lái)初探并發(fā)編程

    詳解Python并發(fā)編程之從性能角度來(lái)初探并發(fā)編程

    這篇文章主要介紹了詳解Python并發(fā)編程之從性能角度來(lái)初探并發(fā)編程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python判斷設(shè)備是否聯(lián)網(wǎng)的方法

    python判斷設(shè)備是否聯(lián)網(wǎng)的方法

    這篇文章主要為大家詳細(xì)介紹了python判斷設(shè)備是否聯(lián)網(wǎng)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評(píng)論