elementUI驗證數字,input校驗數字型別
阿新 • • 發佈:2020-12-28
異常:
一、認識異常:
1.什麼是異常:
異常是指在程式執行過程中發生的異常事件,通常是由外部問題(如硬體錯誤、輸入錯誤)所導致的。注意異常與錯誤的區別:異常時程式執行的過程中出現的,而錯誤是編譯時產生的。廣義上,異常分為兩類Error和Except。
2.異常舉例
先看下面這段程式碼:
# 例1:
num01 =int(input("請輸入一個數字:"))
num02 =int(input("請輸入一個數字:"))
print(num01/num02)
# 例2:
list01 = [11,22,33,44,55 ,66]
print(list01[8])
分析:
先說例1,例1在我們執行的過程中也許不會出錯,但是一旦我們給num01和num02傳入的是非數字,或者是給num02傳入0,程式會立馬報錯並停止執行,這是異常;再看例2,我們在編寫這段程式的時候,並沒有提示出錯,說明編譯沒有出錯,但是當我們執行這段程式碼後,會提示下標越界,這也是異常。
可能你會覺得這些錯誤很可笑,不會出錯,那是因為現在你所編寫的程式碼的長度和複雜度不夠,在足夠大的專案裡,裡邊可能會出現很多異常,而我們並不能及時的發現,更甚是還有一些異常是由於系統出現故障引起的。
二、解決異常的反法
1.條件選擇語句:
對於一些簡單的異常,我們可以採用條件選擇語句處理,就以上例中的例1為例:
num01 =input("請輸入被除數:")
num02 =input("請輸入除數:")
if num01.isdigit() and num02.isdigit():
num01 = int(num01)
num02 = int(num02)
if num02 != 0:
print("%d / %d = %.2f" % (num01,num02,num01/num02))
else:
print("除數為零,出現異常!")
else:
print("輸入的資料不是整數!" )
用這種方法只能解決異常大家庭中的極少數的異常。因此,我們也很少使用這種方法去處理異常。通常我們所說的異常處理包含兩類:
'''
異常處理在程式碼中主要有兩種方式: 1. 異常捕獲 2. 丟擲異常
異常捕獲有以下幾種方式:
1. try --- except
2. try --- except --- else
3. try --- except --- finally
4. try --- except --- else --- finally
丟擲異常:使用raise關鍵字來丟擲異常
'''
2. 捕獲異常
-
使用try — except捕獲異常
""" # 使用方法: try: 有可能出現異常的程式碼 except: 解決方法 """ # 案例: import traceback list01 = [11,22,33,44,55,66,7,8,9] try: print(list01[len(list01)]) except Exception as e: print("訪問集合的元素出現異常!請聯絡管理員!") print(str(e)) #反饋異常的基本資訊 print(e) #反饋異常的基本資訊 print(e.args[0]) #反饋異常的基本資訊 print(repr(e)) #反饋異常類和異常的基本資訊 print(traceback.format_exc()) #獲取異常的詳細資訊 traceback.print_exc(file = open(".txt","w")) # 執行結果: 訪問集合的元素出現異常!請聯絡管理員! list index out of range list index out of range list index out of range IndexError('list index out of range') Traceback (most recent call last): File "D:/mypycharm/pythonProject/千峰培訓/day1/01_demo.py", line 80, in <module> print(list01[len(list01)]) IndexError: list index out of range
這種異常處理中,我們一般會採用最後一種,記錄異常資訊,因為有些程式我們不能時時刻刻的盯著,這種情況,採用這種方式,就會起到很好的效果。
-
具體化異常處理函式
""" # 使用方法: try: 有可能出現異常的程式碼 except: 解決方法 else: 未出現異常執行的程式碼 """ import traceback str = True while str: try: num01 = int(input("請輸入被除數:")) num02 = int(input("請輸入除數:")) print("%d / %d = %.2f" % (num01, num02, num01 / num02)) str = False except ValueError as e: print("輸入的不是整數!") except ZeroDivisionError as e: print("輸入的除數為零!") except Exception as e: print("未知的異常,具體檢視日誌!") traceback.print_exc(file= open("D:\mypycharm\systemlogError.txt","w")) else: print("程式正常執行,沒有出現異常!")
-
使用 try — except — finally 捕獲異常
try: num01 = int(input("請輸入被除數:")) num02 = int(input("請輸入除數:")) print("%d / %d = %.2f" % (num01, num02, num01 / num02)) except: print("程式碼出現異常!") finally: print("=== finally中的程式碼!===")
執行程式碼:
請輸入被除數:18 請輸入除數:0 程式碼出現異常! === finally中的程式碼!=== 請輸入被除數:18 請輸入除數:3 18 / 3 = 6.00 程式正常執行,沒有出現異常! ====finally===
注意: 無論try中程式碼是否異常,finally中的程式碼都會執行;finally程式碼主要對資源的回收:開啟檔案的關閉,或者開啟資料之後的關閉連線
案例;
try: global fd fd = open ("C:\\Users\\42079\\PycharmProjects\\testTT\\ystemlogError.txt",encoding="UTF-8") print(fd) except FileNotFoundError as e: print("檔案路徑或名字錯誤!") except UnicodeDecodeError as e: print("編碼無法識別!") except Exception as e: print("其他未知異常!") finally: fd.close()
-
方法4: 使用 try — except — else — finally 捕獲異常
while str: try: num01 = int(input("請輸入被除數:")) num02 = int(input("請輸入除數:")) print("%d / %d = %.2f" % (num01, num02, num01 / num02)) str = False except ValueError as e: print("輸入的不是整數!") except ZeroDivisionError as e: print("輸入的除數為零!") except Exception as e: print("未知的異常,具體檢視日誌!") traceback.print_exc(file = open("C:\\Users\\42079\\PycharmProjects\\testTT\\ystemlogError.txt","w")) else: print("程式正常執行,沒有出現異常!") # 未出現異常執行的程式碼 finally: print("====finally===")
3. 丟擲異常:
案例: 對兩個0-10000之間的數進行運算
# 產生了異常,使用raise丟擲異常
def div(num01:int,num02:int):
if num01 > 10000 or num01 < 0 or num02 > 10000 or num02 < 0:
raise Exception("輸入的數不在範圍內!")
# 可以直接使用raise丟擲異常,也可以使用完整的丟擲異常的方法丟擲異常
try:
return num01/num02
except ZeroDivisionError as e:
raise e
if __name__ =='__main__':
str01 = True
while str01:
try:
num01= int((input("請輸入0-10000之間的整數:")))
num02= int((input("請輸入0-10000之間的整數:")))
print("%d / %d = %.2f" % (num01, num02, div(num01,num02)))
str = False
# 以下3中方式是接收方法中可能丟擲的異常
except ValueError as e:
print("輸入的數不是整數!")
except ZeroDivisionError as e:
print("輸入的除數為零!")
except Exception as e:
print(str(e))
# 正確的程式碼,也就是不會出現異常的程式碼
else:
print("%d + %d = %d" % (num01, num02, num01 + num02))
print("%d - %d = %d" % (num01, num02, num01 - num02))
print("%d * %d = %d" % (num01, num02, num01 * num02))
str01 = False
print()
# 程式碼從主函式裡開始,自傷而下執行,先執行try中的程式碼塊,如果出現異常,就會丟擲異常,else內的程式碼不會執行,直到異常消除位為止。
執行結果:
請輸入一個0-10000之間的整數:10001
請輸入一個0-10000之間的整數:-1
輸入的數不在範圍內!
請輸入一個0-10000之間的整數:9999
請輸入一個0-10000之間的整數:0
輸入的除數為零!
請輸入一個0-10000之間的整數:9999
請輸入一個0-10000之間的整數:9999
9999 / 9999 = 1.00
9999 + 9999 = 19998
9999 - 9999 = 0
9999 * 9999 = 99980001
Process finished with exit code 0