Python中try excpet BaseException(異常處理捕獲)的使用
try ...except 是最常見的捕獲處理異常的結(jié)構(gòu),其主要作用是將可能出現(xiàn)問題的代碼塊用try :包裹起來,不至于出現(xiàn)錯(cuò)誤讓程序崩潰,無(wú)法執(zhí)行下去
常見的try ...excpet 的結(jié)構(gòu)有三種
try: pass except BaseException as e : 異常處理模塊
try 中包含著可能發(fā)生異常的程序代碼,except 塊中包含著,發(fā)生異常后,用來捕獲異常和處理異常代碼
如果在try包含的模塊中發(fā)生了異常則會(huì)跳轉(zhuǎn)到 except的模塊中,去執(zhí)行 except中的代碼,excpet中的模塊會(huì)處理異常,如果沒有發(fā)生異常,則程序不會(huì)執(zhí)行except中的代碼。
書寫了一段用于測(cè)試會(huì)報(bào)錯(cuò)的代碼塊
try: test = eval(str(input("請(qǐng)輸入一個(gè)字符串: "))) tests = test + "This is a piece of test code" except BaseException as e: print("出現(xiàn)的錯(cuò)誤可能是%s"%e) print("這是一段測(cè)試輸出")
錯(cuò)誤提示: unsupported operand type(s) for +: 'int' and 'str'
不支持 :數(shù)據(jù)類型:“int”和“str”拼接(+)操作
一段正確的代碼輸入:
try: test = str(input("請(qǐng)輸入一個(gè)字符串: ")) tests = test + " "+"This is a piece of test code" print("輸入正確的內(nèi)容則會(huì)執(zhí)行的代碼塊:",tests) except BaseException as e: print("出現(xiàn)的錯(cuò)誤可能是%s"%e) print("這是一段測(cè)試輸出")
字是不允許和字符串拼接的只有把數(shù)字轉(zhuǎn)換成字符串才允許拼接。
這是一段沒有用try except:處理的有問題代碼塊
如果不用try...except... :對(duì)可能出現(xiàn)的代碼進(jìn)行包裹,程序就會(huì)崩潰,影響后續(xù)代碼進(jìn)行
test = int(input("請(qǐng)輸入一個(gè)字符串: ")) tests = test + " "+"This is a piece of test code" print("這是一段測(cè)試輸出")
多個(gè)except 語(yǔ)句、
如果寫入的代碼出錯(cuò)類型不太清楚,可以多寫幾個(gè)捕獲異常語(yǔ)句,記得在最后加上一個(gè)except BaseException 用來做兜底操作(假如出現(xiàn)的錯(cuò)誤都不是你用except 捕獲的異常你可以用它來兜底),它是所有異常的父類包含了所有常見的異常
arr = { "xiaomi":"123", "xiaozhang":"456", "xiaodede":"7,8,9" } arrs = (1,2,3,4,5) try: 3 / 0 print(arrs[6]) except IndexError : print('導(dǎo)入包失敗') except KeyError : print('在字典中找不到指定的鍵') except ImportError : print("索引時(shí)沒有找到指定序列") #兜底捕獲錯(cuò)誤,BaseException 是所有錯(cuò)誤的父類可以說是包含了所有常見的錯(cuò)誤 except BaseException as e: print(arr["mayuanyuan"]) print(e)
上述操作和下面的操作表達(dá)的功能是一致的,你也可以將所有可能出現(xiàn)的異常寫在一個(gè) except 中,異常和異常之間 用逗號(hào)隔開
arr = (1,2,3,4,5) try: int("3.1415926") print(add) # 未定義 print(arr[6]) #超出索引 except (IndexError,NameError,ValueError)as e: print(e)
3 try... except... esle
如果try 中包含的代碼塊沒有異常,則會(huì)接著執(zhí)行else 中的語(yǔ)句,不會(huì)去執(zhí)行 excpet中的代碼塊(這段代碼只有try中的代碼塊拋出異常時(shí),則會(huì)使用except去捕獲)
try: arr = int(input("請(qǐng)輸入一個(gè)整數(shù): ")) except BaseException as e: print(e) else: arrs = arr + 111 print(arrs) print("測(cè)試結(jié)束")
異常處理模塊就講到到這里了,我要談到關(guān)于異常處理模塊try except實(shí)際用途,有的博主會(huì)談一些簡(jiǎn)單的案例,可能有的同學(xué)對(duì)這個(gè)模塊認(rèn)識(shí)的并不是很深入,為什么呢?
try: 4 /0 except BaseException as e: print(e) 報(bào)錯(cuò): division by zero
明明你知道是,除零操作,你為什么不改呢?有的錯(cuò)誤你明明知道什么?故意把錯(cuò)誤寫出來,難道就是為了測(cè)試錯(cuò)誤嗎?
所以經(jīng)過我的考慮給了大家一個(gè)好玩的
登錄密碼案例的操作,如果密碼輸入正確,則會(huì)提示登錄成功,錯(cuò)誤的話則會(huì)繼續(xù)輸入,錯(cuò)誤輸入大于三次時(shí)就會(huì)提示:"輸入錯(cuò)誤次數(shù)過多密碼已鎖定“
i = 0 while True: if i == 3: print("輸入錯(cuò)誤次數(shù)過多密碼已鎖定") break try: Divisor = str(input("請(qǐng)輸入一個(gè)整數(shù): ")) # A = Divisor/1 # B = A+1 #如果輸出有誤就不會(huì)執(zhí)行加1操作直接跳到 except當(dāng)中 # print("結(jié)果是:",B) mima = 'ma123' if Divisor == mima: i = i+1 print("登錄成功,輸入%s次"%i) break except: i = i+1 print("密碼輸入錯(cuò)誤請(qǐng)重新輸入:") print("登陸了%s次"%i)
這是關(guān)于“try... except... esle ”具有實(shí)際用途的一段代碼
提示你輸入密碼,然后根據(jù)密碼的內(nèi)容進(jìn)行適當(dāng)?shù)募用?,拼?/p>
md5 = [] try: Divisor = str(input("請(qǐng)輸入你的密碼: ")) except: print("密碼輸入錯(cuò)誤") else: for i in Divisor: if i == 1: i = "a" else: i == 2 i = "b" md5.append(i) MD5 = Divisor + md5[0] print("經(jīng)過加密后的數(shù)據(jù)%s"%MD5)
到此這篇關(guān)于Python中try excpet BaseException(異常處理捕獲)的使用的文章就介紹到這了,更多相關(guān)Python 異常處理捕獲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python實(shí)現(xiàn)橋接模式的代碼詳解
橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它將抽象部分與其實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化,本文將給大家介紹如何使用Python實(shí)現(xiàn)橋接模式,需要的朋友可以參考下2024-02-02學(xué)習(xí)python之編寫簡(jiǎn)單乘法口訣表實(shí)現(xiàn)代碼
這篇文章主要介紹了學(xué)習(xí)python之編寫簡(jiǎn)單乘法口訣表實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-02-02學(xué)習(xí)python如何處理需要登錄的網(wǎng)站步驟
這篇文章主要為大家介紹了python如何處理需要登錄的網(wǎng)站步驟學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10在Linux下使用Python的matplotlib繪制數(shù)據(jù)圖的教程
這篇文章主要介紹了在Linux下使用Python的matplotlib繪制數(shù)據(jù)圖的教程,matplotlib基于Numpy進(jìn)行科學(xué)計(jì)算上的延伸,需要的朋友可以參考下2015-06-06