1.程式中難免出現錯誤,而錯誤分成兩種
1.語法錯誤(這種錯誤,根本過不了python直譯器的語法檢測,必須在程式執行前就改正)
#語法錯誤示範一
if#語法錯誤示範二
def test:
pass
#語法錯誤示範三
print(haha
2.邏輯錯誤
#使用者輸入不完整(比如輸入為空)或者輸入非法(輸入不是數字)
num=input(">>: ")
int(num)
#無法完成計算
res1 = 1/0
res2 = 1+'str'
2.異常異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下
3.python中的異常種類
在python中不同的異常可以用不同的型別(python中統一了類與型別,型別即類)去標識,不同的類物件標識不同的異常,乙個異常標識一種錯誤
什麼是異常?
異常就是我們語法上是沒有問題,但是執行時就報錯的稱為異常, 異常發生之後剩餘**將不會繼續執行
什麼是異常處理
python直譯器檢測到錯誤,觸發異常(也允許程式設計師自己觸發異常raise)
程式設計師編寫特定的**,專門用來捕捉這個異常(這段**與程式邏輯無關,與異常處理有關)
如果捕捉成功則進入另外乙個處理分支,執行你為其定製的邏輯,使程式不會崩潰,這就是異常處理
為什麼要進行異常處理?
python解析器去執行程式,檢測到了乙個錯誤時,觸發異常,異常觸發後且沒被處理的情況下,程式就在當前異常處終止,後面的**不會執行,誰會去用乙個執行著突然就崩潰的軟體。
所以你必須提供一種異常處理機制來增強你程式的健壯性與容錯性
處理異常的兩種方式:
python:為每一種異常定製了乙個型別,然後提供了一種特定的語法結構用來進行異常處理
1 基本語法
try:
被檢測的**塊
except 異常型別:
try中一旦檢測到異常,就執行這個位置的邏輯
```python
讀檔案示例
f = open("userinfo","r",encoding="utf-8")
while true:
try:
print(next(f))
except stopiteration:
f.close()
break
next(f)會觸發迭代f,依次next(f)就可以讀取檔案的一行行的內容,無**件userinf有多大,同一時刻記憶體中只有一行內容。當檔案控制代碼f中的內容next完後就會丟擲異常stopiteration後才可以執行f.close()
2 異常類處理指定的異常情況
未捕獲到異常,程式直接報錯
s1 = 'hello'
try:
int(s1)
except indexerror as e: # as相當於將報錯資訊賦值給了e
print e
正確方法:
s1 = 'hello'
try:
int(s1)
except valueerror as e:
print e
# 報什麼錯,用什麼錯誤型別去接受
3 萬能異常 - exception
他可以捕獲任意異常,例如:
s1 = 'hello'
try:
int(s1)
except exception as e:
print(e)
```python
你可能會說既然有萬能異常,那麼我直接用上面的這種形式就好了,其他異常可以忽略
你說的沒錯,但是應該分兩種情況去看
如果你想要的效果是,無論出現什麼異常,我們統一丟棄,或者使用同一段**邏輯去處理,那麼可以那麼做
s1 = 'hello'
try:
int(s1)
except exception,e:
"""丟棄或者執行其他邏輯"""
print("編碼邏輯")
#如果你統一用exception,沒錯,是可以捕捉所有異常,但意味著你在處理所有異常時都使用同乙個邏輯去處理(這裡說的邏輯即當前expect下面跟的**塊)
4 多分支
s1 = 'hello'
try:
int(s1)
except indexerror as e:
print(e)
except keyerror as e:
print(e)
except valueerror as e:
print(e)
except exception as e:
print(e)
5 異常的其他結構
s1 = 'hello'
try:
int(s1)
except indexerror as e:
print(e)
except keyerror as e:
print(e)
except valueerror as e:
print(e)
else:
print('try內**塊沒有異常則執行我')
finally:
print('無論異常與否,都會執行該模組,通常是進行清理工作')
6 主動觸發異常
try:
raise typeerror('型別錯誤')
except exception as e:
print(e)
7 自定義異常
class evaexception(baseexception):
def __init__(self,msg):
self.msg = msg
def __str__(self):
return self.msg
try:
raise evaexception('型別錯誤')
except evaexception as e:
print(e)
8 斷言
assert 條件
assert 1 == 1
assert 1 == 2
python基礎之異常處理
引入 程式執行時,難免出現bug,當出現bug時,使用者可能很難明白那一堆報錯 到底是個什麼東西,為了讓使用者能更清楚知道錯誤原因或者直接對使用者將此錯誤遮蔽,異常處理就應運而生。格式 try 輸入要執行的 pass except nameerror as err 將該型別的錯誤捕獲 pass ex...
python基礎之異常處理
為了增加程式設計的友好性,避免程式出現bug時將錯誤資訊顯示給使用者,有了異常處理這個好東東.while true num1 input num1 num2 input num2 try num1 int num1 num2 int num2 except exception as ex print...
Python基礎學習之異常處理
編寫程式時,如果遇到異常,且沒有被處理,那麼程式自動結束而不會執行後面的 塊。在io輸入輸出,運算時或者多執行緒處理常會遇到異常,這時需要對其進行預處理,異常也是乙個物件。異常處理 基本框架為 try 正常執行,可能遇到錯誤的 塊 except exceptional exception2 exce...