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

一篇文章帶你了解python異常基礎(chǔ)

 更新時間:2021年08月18日 09:06:15   作者:wakeyo_J  
今天小編就為大家分享一篇關(guān)于Python中的異常介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

1. 程序中的問題

1.1 低級語法錯誤

低級錯誤純屬語法錯誤,代碼主要在編寫、調(diào)試階段就報錯。

>>> if True
SyntaxError: invalid syntax
>>> 

上述錯誤是初學時很容易犯的語法錯誤,True后面缺少冒號(:)。

1.2 中介錯誤:代碼存在隱性錯誤

隱形錯誤主要是指代碼編寫存在邏輯錯誤或缺陷,當程序滿足特定數(shù)據(jù)處理條件時,報錯或給出錯誤答案。

>>> def print_D(dic):
	i=0
	len1=len(dic)
	while i < len1:
		print(dic.popitem())    #隨機刪除并返回一個元素
		i+=1
		
>>> print_D({1:'a',2:'b'})
(2, 'b')
(1, 'a')

上述代碼能夠正常運行,但是在實際的程序使用過程中,可能另一個程序員傳遞一個非字典對象后。

>>> print_D([1,2,3,4])
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    print_D([1,2,3,4])
  File "<pyshell#9>", line 5, in print_D
    print(dic.popitem())
AttributeError: 'list' object has no attribute 'popitem'

錯誤的傳遞對象導(dǎo)致了正常程序出錯,這就是隱性錯誤。隱性錯誤的特點是正常情況下程序正常運行,特殊情況下(如邊界值沒有考慮到,傳入數(shù)據(jù)沒有仔細檢查類型等)出錯。有些隱性錯誤甚至不報錯,而是由結(jié)果輸出,這是最糟糕的情況。

1.3 高級錯誤:軟件面對不確定性的異常錯誤

高級錯誤指不確定性的錯誤,主要指軟件的代碼本身沒有問題,所輸入的數(shù)據(jù)也能得到控制或保證,而是在運行過程中環(huán)境所帶來的不確定性異常。如:

(1)軟件本身去嘗試打開一個文件,而這個文件已經(jīng)被破壞或獨占(獨占指一個進程(線程)處理過程,其他進程(線程)無法同步處理,只能等待這個進程(線程)處理完成,其他進程(線程)才能繼續(xù)操作)。

(2)軟件在往數(shù)據(jù)庫插入數(shù)據(jù)過程中,突然網(wǎng)絡(luò)中斷,導(dǎo)致數(shù)據(jù)丟失

(3)軟件運行硬件出現(xiàn)故障,導(dǎo)致軟件無法正常運行等

(4)數(shù)據(jù)庫系統(tǒng)被破壞,軟件讀寫數(shù)據(jù)報錯

(5)軟件輸入內(nèi)容過度復(fù)雜或存在錯誤操作,。

2. 捕捉異常

2.1 基本異常捕捉語句

基本異常捕捉語句語法

try:
	代碼模塊1
except:
	代碼模塊2

try關(guān)鍵字,表示捕捉異常語句的開始;代碼模塊1,屬于正常需要執(zhí)行的代碼模塊;except關(guān)鍵字,用于捕捉異常信息,并可以給出出錯信息(默認英文提示)。

在這里插入圖片描述

(1)先執(zhí)行try語句,代表捕捉異常機制開始

(2)執(zhí)行代碼模塊1,若沒有出錯,忽略except關(guān)鍵字和代碼模塊2,代碼正常執(zhí)行完畢

(3)若執(zhí)行代碼模塊1過程發(fā)生異?,F(xiàn)象,則終止代碼模塊1內(nèi)剩余代碼的執(zhí)行,轉(zhuǎn)到except處

(4)except關(guān)鍵字捕捉到異常信息,并執(zhí)行代碼模塊2(往往給出錯誤信息提示或做出錯后問題處理),異常處理結(jié)束

示例

>>> def print_D(dic):
	i=0
	try:
		len1=len(dic)
		while i < len1:
			print(dic.popitem())
			i+=1
	except:
		print('傳遞值類型出錯,必須為字典類型!')
		
>>> print_D({1:'a',2:'b'})
(2, 'b')
(1, 'a')
>>> print_D([1,2,3,4])
傳遞值類型出錯,必須為字典類型!        #出錯后的正確提示信息

2.2 帶finally子句的異常處理

基本格式:

try:
	代碼模塊1
except:
	代碼模塊2
finally:
	代碼模塊3

finally關(guān)鍵字后的代碼模塊3,運行代碼模塊1是否出錯都會執(zhí)行的代碼功能。

案例 1

>>> try:
	1/0
except:
	print('除數(shù)不能為0')
finally:
	print('出現(xiàn)執(zhí)行結(jié)束')
>>> 

案例 2

>>> try:
	1/2
except:
	print('出書不能為0')
finally:
	print('出現(xiàn)運行結(jié)束')
>>> 

#運行結(jié)果
0.5
出現(xiàn)運行結(jié)束

案例 3

import sys
try:
	1/0
except:
	print('除數(shù)不能為0')
	sys.exit()
finally:
	print('程序執(zhí)行結(jié)束')
print('我能執(zhí)行碼?')
>>> 

#運行結(jié)果
除數(shù)不能為0
程序執(zhí)行結(jié)束

2.3 try-except-else 結(jié)構(gòu)

結(jié)構(gòu)運行過程:程序進入try語句部分,當try語句部分發(fā)生異常則進入except語句部分,若不發(fā)生異常進入else語句部分。

try:
    print("正常代碼")
except Exception as e:
    print("將不會輸出這句話")
else:
    print("這句話將被輸出")
print('-'*30)
try:
    print(1/0)
except Exception as e:
    print("進入異常處理")
else:
    print("不會輸出")

>>> 

#運行結(jié)果
正常代碼
這句話將被輸出
------------------------------
進入異常處理

2.4 try-except-else-finally 結(jié)構(gòu)

try:
    print("沒有異常")
except Exception as e:
    print("不會輸出!")
else:
    print("進入else")
finally:
    print("必須輸出!")
print('-'*30)
try:
    print(1/0)
except Exception as e:
    print("引發(fā)異常")
else:
    print("不會進入else")
finally:
    print("必須輸出!")
>>>

# 運行結(jié)果
沒有異常
進入else
必須輸出!
------------------------------
引發(fā)異常
必須輸出!

2.5 捕捉特定異常信息

在這里插入圖片描述

3. 拋出異常

python允許程序員自己觸發(fā)異常,可以通過raise關(guān)鍵字來實現(xiàn),使用格式:

raise [Exception]

Exception參數(shù)可選,其對象如上表所示的Exception類的子類。

示例一:不帶參數(shù)的觸發(fā)

>>> raise
Traceback (most recent call last):
  File "<pyshell#52>", line 1, in <module>
    raise
RuntimeError: No active exception to reraise
>>> 

代碼通過raise子句拋出一個沒有問題的異常信息。

示例二:帶參數(shù)的觸發(fā)

>>> i='1'
>>> if type(i)!=int:
	raise TypeError('i類型出錯!')
Traceback (most recent call last):
  File "<pyshell#57>", line 2, in <module>
    raise TypeError('i類型出錯!')
TypeError: i類型出錯!
>>> 

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 基于Python中的yield表達式介紹

    基于Python中的yield表達式介紹

    今天小編就為大家分享一篇基于Python中的yield表達式詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python數(shù)據(jù)類型可變不可變知識點總結(jié)

    python數(shù)據(jù)類型可變不可變知識點總結(jié)

    在本篇文章里小編給各位整理的是關(guān)于python數(shù)據(jù)類型可變不可變知識點總結(jié),需要的朋友們可以學習下。
    2020-03-03
  • 使用PYTHON接收多播數(shù)據(jù)的代碼

    使用PYTHON接收多播數(shù)據(jù)的代碼

    一個PYTHON腳本,能夠在LINUX上發(fā)送多播數(shù)據(jù)。其實編制起來也不算太麻煩。具體代碼如下
    2012-03-03
  • 用python 制作圖片轉(zhuǎn)pdf工具

    用python 制作圖片轉(zhuǎn)pdf工具

    這篇文章主要介紹了用python 制作圖片轉(zhuǎn)pdf工具的思路及代碼,非常詳細,有需要的小伙伴參考下
    2015-01-01
  • DjangoWeb使用Datatable進行后端分頁的實現(xiàn)

    DjangoWeb使用Datatable進行后端分頁的實現(xiàn)

    這篇文章主要介紹了DjangoWeb使用Datatable進行后端分頁的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python pandas最常用透視表實現(xiàn)應(yīng)用案例

    python pandas最常用透視表實現(xiàn)應(yīng)用案例

    透視表是一種可以對數(shù)據(jù)動態(tài)排布并且分類匯總的表格格式,它在數(shù)據(jù)分析中有著重要的作用和地位,在本文中,我將為你介紹python中如何使用pandas包實現(xiàn)透視表的功能,以及一些常見的應(yīng)用案例
    2024-01-01
  • 使用Python進行自動化部署詳解

    使用Python進行自動化部署詳解

    在軟件開發(fā)和運維領(lǐng)域,自動化部署是一個至關(guān)重要的環(huán)節(jié),本文將介紹如何使用Python進行自動化部署,并提供代碼實例來說明,希望對大家有所幫助
    2024-04-04
  • Python高級特性 切片 迭代解析

    Python高級特性 切片 迭代解析

    這篇文章主要介紹了Python高級特性 切片 迭代解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 使用Python編程分析火爆全網(wǎng)的魷魚游戲豆瓣影評

    使用Python編程分析火爆全網(wǎng)的魷魚游戲豆瓣影評

    本文來為大家介紹如何使用Python爬取影評的操作,主要是爬取《魷魚游戲》在豆瓣上的一些影評,對數(shù)據(jù)做一些簡單的分析,用數(shù)據(jù)的角度重新審視下這部劇,有需要的朋友可以借鑒參考下
    2021-10-10
  • 如何使用python統(tǒng)計字符在文件中出現(xiàn)的次數(shù)

    如何使用python統(tǒng)計字符在文件中出現(xiàn)的次數(shù)

    在開發(fā)過程中很多時候我們有統(tǒng)計單個字符或者字符串在另一個字符串中出現(xiàn)次數(shù)的需求,下面這篇文章主要給大家介紹了關(guān)于如何使用python統(tǒng)計字符在文件中出現(xiàn)的次數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-03-03

最新評論