標籤:end 讀寫 UI one word rod div 括弧 name
異常處理錯誤與異常
異常處理
說明:異常處理可以認為是一種特殊的流程式控制制語句,可以提高代碼的健壯性。
文法:try-except
try:
print(‘正常執行‘)
# print(a)
print(3/0)
except Exception as e:
# Exception是所有異常的基類,因此此處可以捕獲所有異常
print(‘出現異常,進行處理‘)
print(e)
?
print(‘其他代碼‘)
捕獲多個異常:
try:
# print(a)
# print(3/0)
fp = open(‘123.txt‘)
except NameError as e:
print(‘NameError:‘, e)
except ZeroDivisionError as e:
print(‘ZeroDivisionError:‘, e)
except Exception as e:
print(‘other:‘, e)
也可以對多種異常進行分組處理:
try:
# print(a)
# print(3/0)
fp = open(‘123.txt‘)
except (NameError, ZeroDivisionError) as e:
# 將特定的某些異常統一處理,寫到元組中即可
print(e)
except:
print(‘其他異常‘)
else和finally
try:
print(‘正常執行‘)
print(a)
except:
print(‘出現異常‘)
else:
# 出現異常就不執行了
print(‘正常結束‘)
finally:
# 無論有誤異常都會執行
print(‘無論如何都執行‘)
else:在沒有異常的時候回執行,出現異常就不執行了
finally:無論是否有異常,都會執行
拋出異常:raise
try:
print(‘開始‘)
# 根據代碼邏輯的需要,手動拋出特定的異常
raise Exception(‘手動拋出異常‘)
print(‘一切正常‘)
except Exception as e:
print(‘出現異常:‘, e)
?
print(‘結束‘)
異常嵌套:try-except結構中嵌套try-except結構
print(‘我要去上班,什麼事情都不能阻止我上班的腳步‘)
try:
print(‘我準備騎電動車‘)
raise Exception(‘昨天晚上那個缺德的傢伙把我充電器給拔了,無法騎車‘)
print(‘騎電動車提前到達公司‘)
except Exception as e:
print(e)
try:
print(‘我準備坐公交‘)
raise Exception(‘等了20分鐘一直沒有公交車,果斷放棄‘)
print(‘坐公交準時到達公司‘)
except Exception as e:
print(e)
print(‘我準備打車‘)
print(‘打車還是快,一會就到公司了‘)
?
print(‘熱情滿滿的開始一天的工作‘)
自訂異常類:繼承自異常的基類(Exception)
# 自訂異常類,名字通常以Exception結尾
class MyException(Exception):
def __init__(self, msg):
self.msg = msg
?
def __str__(self):
# repr鍵變數轉換成字串,若本身是字串則不必要
# return repr(self.msg)
return self.msg
?
def deal(self):
print(‘異常已處理‘)
?
try:
print(‘正常執行‘)
raise MyException(‘手動拋出定義異常‘)
except MyException as e:
print(e)
e.deal()
特殊使用
# fp = open(‘test.txt‘, ‘rb‘)
# # 各種讀寫操作
# fp.close()
?
# 使用with,無需關心檔案的關閉問題
with open(‘test.txt‘, ‘rb‘) as fp:
content = fp.read(5)
print(content)
?
python 異常處理