目錄
**出現異常而報錯再正常不過了,但為什麼要處理異常?
由於異常的存在,**執行時會出現一大堆的紅色字型提示,對於程式設計師還好,見紅色報錯見多了習慣了,但如果你開發出來的東西要給別人看,那麼不懂**的人就會一臉懵逼,對產品的印象都不太好了。
比如我們經常簡單網頁丟失的情況,其實是就是網頁**執行時發生了異常,但有的網頁還是很個性的,提示的資訊可能是比較人性化的,比如csdn你的文章被後台刪除了,導致直接跳到這個介面的**無法執行,此時的報錯資訊是這樣的:
但有些產品在開發時想得並不是那麼周到,沒有體會使用者端的感受,結果某個程式出錯了,使用者能看到一堆報錯**,好感度直線下降。
首先這篇文章所講的異常不是指教你如何讓**不報錯,**異常出錯得進行除錯來解決,這不是我們這裡的重點,今天的重點是在**可能報錯的地方進行優化和個性化,讓錯誤看起來也比較和諧。
其次這也是python新手入門教程系列文章的乙個重要板塊,可以給以後的開發奠定良好的異常處理基礎,**總會有異常,但有的異常在別人看來卻毫無違和感,這都**於擁有紮實的異常捕獲基本功。
異常是乙個事件,該事件在程式執行過程中發生,影響程式的正常執行。一般情況下,python無法正常處理程式時就會發生乙個異常。
例如我在**中只寫了乙個變數a,執行程式,pycharm無法識別這個變數,所以報錯,便是出現了異常。
所以我們需要掌握處理異常的方法,處理異常的方法有很多種,接下來我們乙個個來看。
它能夠將可能出錯的**進行處理,處理後報錯的紅色字型將會轉換成簡短的、正常的字型,用法如下:
try:
有可能出現異常的**
except 異常型別 as 變數
處理後的**
舉例:直接列印變數a會報錯。
經過tyr-except處理過一下:
try:
print(a)
except nameerror as s:
print(s)
再次執行看效果:
飄紅的報錯資訊變得簡短且顏色正常,看起來這個異常是不是顯得舒服多了?
這裡的tyr-except並不影響**的執行,如果你的**沒有報錯,你就算是寫了tyr-except,它也只會執行try那行**,那行**沒有錯誤,那就不會執行except裡面的**。
例如我們來乙個正常的:
這種方法和前面的try-except寫法是差不多的,只是後面再增加了乙個except,可用於判斷多種可能報錯的情況。
例如:有兩行**可能會報錯,兩種不同型別的異常,但不想讓它飄紅。
try:
1 / 0
print(a)
except nameerror as s: # 第一種寫法,用as+變數
print(s)
except zerodivisionerror: # 第二種寫法,自定義輸出內容
print("除數不能為0") # 自定義輸出的內容
執行結果:
雖然報錯,但沒有飄紅,這裡注意一下except的兩種寫法。
try-except的寫法很靈活的,我們同樣可以用元組把可能報錯的異常型別囊括進去,避免寫多行except,例如:
如果沒有異常,則執行else裡面的**,例如:
不管**是否有異常,最後都會執行finally裡面的**。例如:
except後面其實可以不加錯誤型別,因為系統會預設認為後面的錯誤是型別是exception,這是1個頂層類,包含了所有的出錯型別。
有沒有發現,前面我們去做基本的異常捕獲時,每次可能出錯的地方就得寫乙個try-except,如果有多個地方可能會出錯呢?是否我們需要寫多個try-except?又或者理論上**可以執行,但我想定一下規矩,凡是不符合我規矩的行為,我都讓它出現異常,比如密碼長度超出我規定的長度,我想讓程式出現異常。
程式設計客棧自定義異常可用於引發乙個異常(丟擲乙個異常),由關鍵字raise引發。
舉例:模擬使用者輸入密碼的情景,使用者輸入的密碼不能低於6位數,自定義乙個異常,用於檢測使用者輸入的密碼是否符合規定,不符合則引發異常,提示當前輸入的密碼長度和最小密碼長度不能低於6位數。
class myerror(exception): # 異常捕獲的類
def __init__(self, length, min_len): # length為使用者輸入的密碼長度,min_len為規定的最小長度
self.length = length
self.min_len = min_len
# 設定丟擲異常的描述資訊
def __str__(self):
return "你輸入的長度是%s,不能少於%s" % (self.length, self.min_len)
def main():
try:
con = 程式設計客棧input("請輸入密碼:") # 獲取使用者輸入的密碼
l = len(con) # 獲取使用者輸入的密碼長度
if l < 6:
raise myerror(l, 6) # 長度低於設定的6位數則引發異常
except exception as ss: # 有錯誤則提示
print(ss)
else:
print("您的密碼輸入完畢") # 沒有錯誤則執行
main()
執行結果:
從上面的**中我們又用到了之前物件導向板塊裡面的類和例項物件的知識,忘記的趕緊去複習吧,除此之外,這裡還結合了前面的try-except,還有我們的關鍵字raise引起異常捕獲。
Django 手把手帶你入門
一 開發環境 python 2.7 pycharm 4 二 django的安裝 開啟pycharm 新建專案 看圖操作 自動安裝django環境 三 建立第乙個 1.開啟views.py 匯入 編寫乙個index函式 先寫成硬編碼的形式 2.開啟urls.py 匯入上圖編寫的函式 在urlpatte...
手把手帶你構建SpringBoot專案
springboot引言 spring boot是由pivotal團隊提供的全新框架,其設計目的是用來簡化新spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。總要求 約定 配置 編碼 構建專案 1 建立springboot專案 註解總結...
Windows服務 手把手帶你體驗
microsoft windows 服務 即,以前的 nt 服務 使您能夠建立在它們自己的 windows 會話中可長時間執行的可執行應用程式。這些服務可以在計算機啟動時自動啟動,可以暫停和重新啟動而且不顯示任何使用者介面。這使服務非常適合在伺服器上使用,或任何時候,為了不影響在同一臺計算機上工作的...