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

Python基礎(chǔ)教程之錯誤和異常的處理方法

 更新時間:2022年05月10日 09:40:07   作者:酷爾。  
程序在運行時,如果python解釋器遇到一個錯誤,會停止程序的執(zhí)行,并且提示一些錯誤信息,這就是異常,下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之錯誤和異常的處理方法,需要的朋友可以參考下

前言

繼續(xù)更新Python基礎(chǔ)語法,到目前為止Python基礎(chǔ)語法已經(jīng)接近了尾聲,本次錯誤與異常處理更新完后會對文件、數(shù)據(jù)庫、包管理、模塊管理、正則表達式的使用進行更新。完成這幾個大致的任務(wù)之后將會更新爬蟲與數(shù)據(jù)分析。本專欄所寫的東西非常的適用初學(xué)者,當(dāng)然也非常適合老手,每一部分都有很全面的編程技巧。相信大家看完后會感覺受益匪淺。(文末附有常見異常表)

異常與錯誤的概念

錯誤顧名思義就是由于某種原因,產(chǎn)生了不符合我們預(yù)期的結(jié)果。我們的代碼在運行時非常的有可能出現(xiàn)錯誤,我們有時又稱這種現(xiàn)象為BUG,在Python中異常通常指的是我們的Python解釋器發(fā)現(xiàn)了我們程序中存在的錯誤,自己無法解決該錯誤的時候向操作系統(tǒng)提出了報告引發(fā)程序中斷。正如現(xiàn)實中我們個人犯錯而監(jiān)管我們的人發(fā)現(xiàn)我們的錯誤,發(fā)現(xiàn)我們的異常舉動并進行處理。及時幫我們糾正錯誤行為。

錯誤分類

語法錯誤

語法錯誤又稱為編譯錯誤,是計算機操作系統(tǒng)在執(zhí)行你的代碼的時候,由于你代碼存在語法性問題無法開始執(zhí)行程序?qū)е碌腻e誤,一般就是函數(shù)名、關(guān)鍵字用錯導(dǎo)致或者進行導(dǎo)包的時候?qū)肓瞬淮嬖诘陌kS著編譯器的迭代更新不斷變強,這種錯誤已經(jīng)非常少見了。Python中編譯錯誤提示SyntaxErrorl例如下圖(缺少一半括號):

運行時錯誤

運行時錯誤指的是程序通過了編譯,計算機操作系統(tǒng)開始執(zhí)行你的程序在代碼執(zhí)行過程中出由于編程者的疏忽,產(chǎn)生了代碼之間的矛盾導(dǎo)致的錯誤。例如:沒有考慮到數(shù)組邊界或者變量范圍導(dǎo)致數(shù)組越界、零除異常...這種錯誤會導(dǎo)致你的程序突然就掛掉一定情況下會造成灰常大的損失。例如以下情況:

邏輯錯誤

這種錯誤往往是人們最煩惱的錯誤,因為操作系統(tǒng)不會直接拋出異常給我們看,你的程序也可以正常運行,但是對程序輸入值之后得到的結(jié)果就是不對。非常的氣人,我們能改進這種錯誤的方式就是baidu、動腦思考、進行調(diào)試、實在不行找個老鳥幫你看看。常見的錯誤有:死循環(huán)、表達式錯誤、局部全局變量混用....

異常處理機制

捕獲異常并處理

Python中采用了結(jié)構(gòu)化的異常處理機制我們可以通過try對異常進行捕獲,然后在except中進行異常的處理。最后在finally中進行資源釋放之類的工作(有沒有異常finally中的代碼都會執(zhí)行),與其他語言不同的是,在Python中引入了一個else機制,else中的語句只有在try中的代碼沒有異常的時候才會執(zhí)行。有異常就不執(zhí)行。詳細操作見下面代碼,正如所見,可以對多個類型的異常進行捕獲。對多個異常進行捕獲的話需要將類型涵蓋范圍較小的異常放在前面,而在捕獲之前一般由try代碼塊中的代碼或者函數(shù)進行異常的拋出

# 異常的捕獲
a=int(input('輸入除數(shù):'))
b=int(input('輸入被除數(shù):'))
try:
    res=a/b
except ZeroDivisionError:
    print('除數(shù)不可以為0')
    # 相同處理方式的異??梢赃@么寫
except (BaseException,TypeError):
    print('有錯誤')
else:
    print('您的結(jié)果為',res)
finally:
    print('感謝使用!')

主動拋出異常

我們可以輕松的進行異常的捕獲并進行解決。但是有時候我們有一種需求就是將錯誤拋出給上一層進行處理。這時候主動拋出異常就登場了。在Python中主動拋出異常使用的是raise關(guān)鍵字。raise關(guān)鍵字一般與自定義異常類一塊進行使用,所以大家先記住raise是主動拋出異常的關(guān)鍵字,待會到自定義異常類處看代碼即可。

斷言處理

斷言處理使用語法為:assert <布爾表達式>或者assert <布爾值表達式> , <字符串表達式>。assert會先對布爾值表達式進行判斷,如果表達式為True就不進行操作,否則會拋出異常。并在拋出的異常中輸出字符串表達式的信息。具體操作可以看以下代碼:

'''
3 錄入一個學(xué)生的成績,把該學(xué)生的成績轉(zhuǎn)換為A優(yōu)秀、B良好、C合格、D不及格的形式,
最后將該學(xué)生的成績打印出來。要求使用assert斷言處理分數(shù)不合理(小于0或者大于100)的情況
請編寫程序。
'''

n=int(input())
assert n in range(101),"您輸入的成績不合理!"
if n>=85:
	print("優(yōu)秀!")
elif n>=70:
	print("良好!")
elif n>=60:
	print("合格!")
else:
	print("不及格!")

自定義異常類

Python官方庫中提供了一系列的異常處理類,在Python中所有的異常均由類實現(xiàn),所有的異常類又繼承自BaseException類,程序運行時出現(xiàn)的異常大多繼承自Exception類。Python支持自定義異常類。自定義異常類一般繼承Exception或者其子類名稱一般以Exception或者Error命名。

自定義異常類以及主動拋棄異常

'''
自己定義一個異常類,繼承Exception類, 捕獲下面的過程:判斷input()輸入的字符串長度是否小于5, 
如果小于5,比如輸入長度為3則輸出:"The input is of length 3, expecting at least 5“,
大于5則輸出"success”。 
'''
class StrLenError(Exception):
	def __init__(self,s):
		Exception.__init__(self,s)
		self.s =s
	def __str__(self):
			return f"The input is of length {len(self.s)}, expecting at least 5"
n=input()
if len(n)<=5:
	raise StrLenError(n)
else:
	print("success")

常見異常及釋義

以下是一些常見的類及引發(fā)該類異常的錯誤描述:

類名描述
SyntaxError發(fā)生語法錯誤時引發(fā)
FileNotFoundError未找到指定文件或目錄時引發(fā)
NameError找不到指定名稱的變量時引發(fā)
ZeroDivisionError除數(shù)為0時的異常
IndexError當(dāng)使用超出列表范圍的索引時引發(fā)
KeyError當(dāng)使用映射不存在的鍵時引發(fā)
AttributeError當(dāng)嘗試訪問未知對象屬性時引發(fā)
TypeError當(dāng)試圖在使用a類型的場合使用b類型時引發(fā)

附:用戶自定義異常實例

你可以通過創(chuàng)建一個新的異常類來擁有自己的異常。異常類繼承自 Exception 類,可以直接繼承,或者間接繼承,例如:

>>> class NewError(Exception):
        def __init__(self, value):
            self.value = value
        def __str__(self):
            return repr(self.value)
   
>>> try:
        raise NewError(2*2)
    except NewError as e:
        print('New exception occurred, value:', e.value)
   
My exception occurred, value: 4
>>> raise NewError('oops!')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
__main__.NewError: 'oops!'

在這個例子中,類 Exception 默認的 init() 被覆蓋。

當(dāng)創(chuàng)建一個模塊有可能拋出多種不同的異常時,一種通常的做法是為這個包建立一個基礎(chǔ)異常類,然后基于這個基礎(chǔ)類為不同的錯誤情況創(chuàng)建不同的子類:

class Error(Exception):
    """Base class for exceptions in this module."""
    pass

class InputError(Error):
    """Exception raised for errors in the input.

    Attributes:
        expression -- input expression in which the error occurred
        message -- explanation of the error
    """

    def __init__(self, expression, message):
        self.expression = expression
        self.message = message

class TransitionError(Error):
    """Raised when an operation attempts a state transition that's not
    allowed.

    Attributes:
        previous -- state at beginning of transition
        next -- attempted new state
        message -- explanation of why the specific transition is not allowed
    """

    def __init__(self, previous, next, message):
        self.previous = previous
        self.next = next
        self.message = message

大多數(shù)的異常的名字都以"Error"結(jié)尾,就跟標準的異常命名一樣。

總結(jié)

到此這篇關(guān)于Python基礎(chǔ)教程之錯誤和異常處理的文章就介紹到這了,更多相關(guān)Python錯誤和異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在echarts中圖例legend和坐標系grid實現(xiàn)左右布局實例

    在echarts中圖例legend和坐標系grid實現(xiàn)左右布局實例

    這篇文章主要介紹了在echarts中圖例legend和坐標系grid實現(xiàn)左右布局實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Pygame Event事件模塊的詳細示例

    Pygame Event事件模塊的詳細示例

    事件是Pygame的重要模塊之一,比如鼠標點擊、鍵盤敲擊、游戲窗口移動、調(diào)整窗口大小、觸發(fā)特定的情節(jié)、退出游戲等等,本文就詳細的介紹一下具體用法,感興趣的可以了解一下
    2021-11-11
  • python中通過Django捕獲所有異常的處理

    python中通過Django捕獲所有異常的處理

    誠然,每個人都會寫bug,程序拋異常是一件很正常的事;既然異常總是會拋,那就想辦法在拋出后,盡早解決才是王道。不能老是等待用戶反饋異常和問題,萬一用戶懶得反饋了,豈不很尷尬
    2021-09-09
  • jupyter?notebook內(nèi)核配置的圖文教程

    jupyter?notebook內(nèi)核配置的圖文教程

    Jupyter?Notebook是基于網(wǎng)頁的用于交互計算的應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于jupyter?notebook內(nèi)核配置的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • Python中index()函數(shù)與find()函數(shù)的區(qū)別詳解

    Python中index()函數(shù)與find()函數(shù)的區(qū)別詳解

    這篇文章主要介紹了Python中index()函數(shù)與find()函數(shù)的區(qū)別詳解,Python index()方法檢測字符串中是否包含子字符串 str ,如果指定beg開始和end結(jié)束范圍,則檢查是否包含在指定范圍內(nèi),需要的朋友可以參考下
    2023-08-08
  • python生成可執(zhí)行exe控制Microsip自動填寫號碼并撥打功能

    python生成可執(zhí)行exe控制Microsip自動填寫號碼并撥打功能

    這篇文章主要介紹了python生成可執(zhí)行exe控制Microsip自動填寫號碼并撥打,在這需要注意一個問題,必須是已經(jīng)運行Microsip.exe文件,具體實現(xiàn)代碼跟隨小編一起看看吧
    2021-06-06
  • python打包pyinstall的實現(xiàn)步驟

    python打包pyinstall的實現(xiàn)步驟

    PyInstaller可將Python代碼打包成單個可執(zhí)行文件,本文主要介紹了python打包pyinstall的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • 淺談Django 頁面緩存的cache_key是如何生成的

    淺談Django 頁面緩存的cache_key是如何生成的

    這篇文章主要介紹了Django 頁面緩存的cache_key是如何生成的,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • pow在python中的含義及用法

    pow在python中的含義及用法

    在本篇文章里小編給各位分享了關(guān)于pow在python中是什么意思的相關(guān)知識點內(nèi)容,有需要的朋友們參考學(xué)習(xí)下。
    2019-07-07
  • Python本地與全局命名空間用法實例

    Python本地與全局命名空間用法實例

    這篇文章主要介紹了Python本地與全局命名空間用法,實例分析了Python命名空間的相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06

最新評論