校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 一篇文章帶你了解python異常基礎

一篇文章帶你了解python異常基礎

熱門標簽:宿遷星美防封電銷卡 ai電銷機器人源碼 地圖標注審核表 湛江智能外呼系統廠家 長沙高頻外呼系統原理是什么 ai電話機器人哪里好 西藏房產智能外呼系統要多少錢 百度地圖標注沒有了 外呼并發線路

1. 程序中的問題

1.1 低級語法錯誤

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

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

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

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

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

>>> 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'

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

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

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

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

(2)軟件在往數據庫插入數據過程中,突然網絡中斷,導致數據丟失

(3)軟件運行硬件出現故障,導致軟件無法正常運行等

(4)數據庫系統被破壞,軟件讀寫數據報錯

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

2. 捕捉異常

2.1 基本異常捕捉語句

基本異常捕捉語句語法

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

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


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

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

(3)若執行代碼模塊1過程發生異常現象,則終止代碼模塊1內剩余代碼的執行,轉到except處

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

示例

>>> 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關鍵字后的代碼模塊3,運行代碼模塊1是否出錯都會執行的代碼功能。

案例 1

>>> try:
	1/0
except:
	print('除數不能為0')
finally:
	print('出現執行結束')
>>> 

案例 2

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

#運行結果
0.5
出現運行結束

案例 3

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

#運行結果
除數不能為0
程序執行結束

2.3 try-except-else 結構

結構運行過程:程序進入try語句部分,當try語句部分發生異常則進入except語句部分,若不發生異常進入else語句部分。

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

>>> 

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

2.4 try-except-else-finally 結構

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

# 運行結果
沒有異常
進入else
必須輸出!
------------------------------
引發異常
必須輸出!

2.5 捕捉特定異常信息

3. 拋出異常

python允許程序員自己觸發異常,可以通過raise關鍵字來實現,使用格式:

raise [Exception]

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

示例一:不帶參數的觸發

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

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

示例二:帶參數的觸發

>>> 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類型出錯!
>>> 

總結

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

您可能感興趣的文章:
  • python用戶自定義異常的實例講解
  • 一文搞懂python異常處理、模塊與包
  • python異常的捕捉和補救實例詳解
  • Python拋出引發異常(raise)知識點總結
  • Python異常處理與反射相關問題總結

標簽:漯河 盤錦 林芝 寧夏 南平 普洱 海南 大同

巨人網絡通訊聲明:本文標題《一篇文章帶你了解python異常基礎》,本文關鍵詞  一篇,文章,帶你,了解,python,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《一篇文章帶你了解python異常基礎》相關的同類信息!
  • 本頁收集關于一篇文章帶你了解python異常基礎的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 陆河县| 稻城县| 新和县| 陵水| 灵璧县| 洪江市| 桃园县| 翁牛特旗| 临沭县| 井陉县| 山丹县| 招远市| 蒙自县| 会宁县| 临夏市| 老河口市| 浦城县| 永和县| 桂阳县| 乌兰察布市| 拉孜县| 嘉禾县| 冀州市| 扶沟县| 巍山| 景宁| 肃南| 长葛市| 将乐县| 德江县| 南靖县| 扶风县| 临夏县| 阳信县| 两当县| 久治县| 方山县| 于田县| 兴文县| 洛扎县| 邓州市|