程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python - 異常

編輯:Python

自言自語:先來訂個小目標,2個小時做完完異常
正文開始

文章目錄

  • 了解異常
  • 異常的寫法
    • 語法
    • 快速體驗
    • 捕獲異常
      • 語法
      • 體驗
      • 捕獲多個指定異常
      • 捕獲異常信息描述
      • 捕獲所有異常
    • 異常的else
    • 異常的finally
  • 拓展
  • 異常的傳遞
  • 自定義異常

了解異常

當檢測到一個錯誤時,解釋器就無法繼續執行了,反而出現了一些錯誤的提示,這就是所謂的“異常”。
例如:

  • r方式打開一個不存在的文件
open('test.txt','r')

  • 變量先定義再調用,如果先調用的話也會報錯

異常的寫法

語法

try:
可能發生錯誤的代碼
except:
如果出現異常執行的代碼

快速體驗

需求:嘗試以r模式打開文件,如果文件不存在,則以w方式打開。

try:
open('test.txt','r')
except:
open('test.txt','w')

捕獲異常

語法

try:
可能發生錯誤的代碼
except 異常類型:
如果捕獲到該異常類型執行的代碼

體驗

print(num) # NameError: name 'num' is not defined.
''' :前面是錯誤類型,:後面是異常信息。'''
try:
print(num)
except NameError:
print('有錯誤')
# 運行結果: 有錯誤

捕獲多個指定異常

當捕獲多個異常時,可以把要捕獲的異常類型的名字,放到except後,並使用元組的方式進行書寫。

try:
print(1/0)
except (NameError,ZeroDivisionError):
print('有錯誤')
# 運行結果: 有錯誤

捕獲異常信息描述

try:
print(1/0)
except (NameError,ZeroDivisionError) as error:
print(error) # division by zero

捕獲所有異常

Exception 是所有程序異常的父類。

try:
print(1/0)
except Exception as error:
print(error) # division by zero

異常的else

else表示的是如果沒有異常要執行的代碼

try:
print(1) # 1
except Exception as error:
print(error)
else:
print('這是沒有異常的else') # 這是沒有異常的else

異常的finally

finally表示的是無論是否異常都要執行的代碼,例如關閉文件。

try:
f = open('test.txt','r')
except Exception as error:
f = open('test.txt','w')
else:
print('沒有異常') # 不執行
finally:
f.close()

拓展

需求:調用其他py文件的代碼並運行。

  1. 進入文件夾的兩種方式
  • win+r 輸入cmd → 打開運行窗口
    cd + 路徑
  • 打開文件夾 , 輸入cmd
  1. python + 文件名

異常的傳遞

需求:

  1. 嘗試只讀方式test.txt文件,如果文件存在則存在讀取內容,文件不存在則提取用戶即可。
  2. 讀取內容要求,嘗試循環讀取內容,讀取過程中如果監測到用戶意外終止程序,則except捕獲異常並提示用戶。

代碼:

import time
try:
f = open('test.txt') # 默認打開方式是 ‘r’
# 嘗試循環讀取內容
try:
while True:
con = f.readline()
# 讀取的值沒有內容,說明已經讀取完成,應該推出循環
if len(con) == 0:
break
print(con)
# 強制停止1s鐘
time.sleep(1)
except:
# ctrl + c 終止程序,太快了,沒時間按,導入time模塊
print('程序被意外終止')
except:
print('該文件不存在')
finally:
f.close()
print('文件已關閉')

效果:

注意:如果你是在pycharm中打開,ctrl+c可能不行,參考上面拓展的內容打開。

自定義異常

在Python中,拋出自定義異常語法為raise 異常類對象

作用:用來將不滿足程序邏輯的情況進行反饋給用戶。用來報錯。

需求:密碼長度不足,則報異常(用戶輸入密碼,如果輸入長度不足3位,則報錯,即拋出自定義異常,並捕獲該異常)

# 1. 自定義異常類
class ShortInputError(Exception):
def __init__(self, length,min_len) -> None:
# 用戶輸入密碼的長度
self.length = length
# 系統需求最少的長度
self.min_len = min_len
# 設置拋出異常的描述信息
def __str__(self) -> str:
return f'你輸入的長度是{
self.length},不能少於{
self.min_len}'
# 2. 拋出自定義異常
def main():
try:
con = input('請輸入密碼:')
if len(con) < 3:
raise ShortInputError(len(con),3)
# 3. 捕獲異常
except Exception as result:
print(result)
else:
print('密碼已經輸入完成')
t = 0
t = 1
while t:
main()

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved