如何學python 第九課-try&except-錯誤與異常

2021-02-19 玄魂工作室


在調試程序的過程中,總會遇到這樣或者那樣的錯誤。今天我們就學習一下如何定位和解決這些問題。

 

人非聖賢,孰能無過?寫程序的時候難免會遇到一些問題。本篇文章會介紹一些常見的錯誤,並解釋一下其中的道理。

 

出錯並不是壞事

錯誤的出現原因多種多樣。用戶的非法輸入、進程創建失敗等等都可以導致錯誤的出現。除了語法錯誤這種低級錯誤之外,有時候,發現邏輯/使用上的缺陷不僅可以防患於未然,甚至可以讓我們把程序做得更好。

 

看懂錯誤信息

如果程序出了錯,我們通常會得到一個非常醒目的提示。我相信各位應該都遇到不小心寫錯程序時候python給出的錯誤信息,比如下面這個:


遇到錯誤,首先要做的就是找到原因。Python會告訴我們錯誤出現的位置,行號,以及錯誤的類型。上圖出現的錯誤類型是」Type Error」錯誤,這是因為我們嘗試把一個字符類型和一個數據類型加在一起。錯誤的類型有很多,類型與類型之間存在著繼承的關係,可以參見這篇文章:

https://docs.python.org/2/library/exceptions.html#exception-hierarchy

 

有些時候錯誤提示還會用一個小小的^符號幫我們指出錯誤的位置,像這樣:


這種情況更多出現在我們把語句寫錯了的時候。

 

未雨綢繆

如果想要增加程序的穩定性(健壯性),我們應該儘可能的考慮可能發生錯誤的點以及用戶的使用方式,以使得程序不會輕易的崩潰。不合理的輸入是最常見的問題,比它還要常見的則是代碼本身寫錯了。


這個小節的意義是提醒你在寫完程序之後重新讀讀自己寫的代碼,而且要仔細要認真。一旦你學會了定位問題,你的編程功力便上升了一個等級。

現在,我們知道了定位問題的方法。下面,我們來看看具體要怎麼寫處理問題的代碼。

 

處理錯誤

好了,道理講得差不多了,現在開始寫代碼。為了處理錯誤,我們使用try關鍵字和except關鍵字。這跟(英文的)字面意思差不多,試(try)一下這個,如果遇到了問題就把它視為例外(exception)。使用try和except可以讓我們的程序有更好的容錯性。

 

下面我們來演示一下。我們的程序將會要求用戶輸入一個數字,然後把這個數字輸出出來。但我們只接受數字類型的輸入,如果輸入的不是數字,就提示用戶輸入的值有問題。我們會用兩種方式來實現這個功能,第一種不用try和except,另一種使用。

第一種:

 


 

在上面的代碼中,我們讓用戶輸入一個值,並嘗試通過給這個值加一的方式看看它是不是一個數字。(好吧這其實挺可愛的 如果用戶輸入的根本不是一個數字又怎麼加一呢?+1s)如果是一個數字,那麼我們就輸出用戶輸入的數字;如果不是數字,我們就輸出提示。

輸入了數字的時候運行結果如下:


輸入字符的時候運行結果如下:


如果我們所見,我們在輸入數字的時候得到了想要的結果,但是當我們輸入字符串的時候,程序直接崩了。,

 

下面來使用try和except。

 


 

我們再來看看現在程序會怎麼運行:



 

現在,我們的程序可以如我們期待的一樣運行了。

 

總結

在這一篇中我們講述了一些基本的概念,包括』錯誤不全都是壞的』、通過python給出的錯誤提示信息分析錯誤以及通過思考來找到代碼裡的潛在缺陷。我們還嘗試了通過try和except來處理可能遇到的錯誤。

 

練習

嘗試自己製造出各種各樣的錯誤,然後看看它們的錯誤類型;捕捉並處理這些錯誤。

由於教程仍在創作過程中,在整套教程完結前,感興趣的同學請關注我的微信訂閱號(xuanhun521,下方二維碼),我會第一時間在訂閱號推送圖文教程和視頻教程。問題討論請加qq群:Hacking (1群):303242737   Hacking (2群):147098303。

 

相關焦點

  • python妙招-異常處理之try-except
    Python中檢測處理異常是非常重要的,這可以增加代碼的健壯性,我們在寫python程序的時候,會可能會遇到一些不可預料的情況,一旦遇到這些情況,運行時程序便可能會崩潰。比如:讀寫文件時候文件打開錯誤或者文件寫入錯誤,寫爬蟲時網絡請求失敗,返回錯誤404.再或者函數處理一些不確定參數時候,都可以用到異常捕獲。
  • Python學習第50課-處理錯誤和異常
    在工作當中會經常出現意料不到的錯誤和異常,就需要我們對可能出現的錯誤和異常進行預判,然後加上捕獲和處理錯誤異常的代碼,否則,程序在運行過程中,遇到錯誤和異常就會crash崩潰,無法繼續向下執行。●Python的錯誤種類:①語法錯誤,或稱解析錯誤。
  • 別再亂用 try except 了...
    as e:        print('函數錯誤:', e)try:    func()except Exception as e:    print('函數錯誤:', e)根本不管是否有必要,總之套上了try...except...就有了安全感。
  • Python編程思想(32):異常處理中的try…except
    ')儘管通過條件判斷錯誤從技術上可行,但對於一個程序所拋出的錯誤數量是未知的,所以通過條件很可能無法處理所有的錯誤,為了儘可能處理所有的錯誤,可以使用Python語言的try...except語句,該語句可以捕獲各種異常。
  • python入門——Python中異常處理
    python大數據課堂已經開始了。想轉行大數據,數據挖掘,機器學習,人工智慧的小夥伴可以關注啦。上一篇帶大家了解了python中的I/O函數。今天我們來繼續了解python中的異常處理。調試環境以python3.6環境為例。需要代碼和demo的朋友可以搜索「欒鵬全棧」到我的CSDN博客。
  • python教程之九錯誤和異常處理
    Python 有兩種錯誤很容易辨認:語法錯誤和異常。語法錯誤語法分析器指出了出錯的一行,並且在最先找到的錯誤的位置標記了顏色,如下所示。 異常Python 程序的語法是正確的,在運行它的時候,也有可能發生錯誤。運行期檢測到的錯誤被稱為異常。
  • [Python]文件與異常的錯誤處理
    [Python]文件與異常的錯誤處理1.異常處理:try/except機制1.如何處理IOError及其它的異常:try/excepttry:    the_file = open("sketch.txt", 'r')except IOError as err:    print("File error" + str(err))I:\Projects\wifi\Ai-Thinker
  • 第16天:Python 錯誤和異常
    在 Python 中,異常是一個對象,用於表示一個錯誤,當 Python腳本發生異常時我們需要捕獲和處理它,否則程序會終止執行。處理異常Python 提供了 try/except語句用來捕獲和處理異常。try 語句用來檢測語句塊中是否有錯誤,except 語句則用來捕獲 try 語句中的異常,並進行處理,附加的 else 可以在 try 語句沒有異常時執行。
  • 一文看懂Python異常處理(exception, try和raise語句)
    Try again")print("end")try語句按照如下方式工作;首先,執行try子句(在關鍵字try和關鍵字except之間的語句)如果沒有異常發生,忽略except子句,try子句執行後結束。如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分將被忽略。
  • 16-python中的異常
    你好,我是在學python通過前兩天的文章14-python中的函數,15-再敘python中的函數我們對python中有關函數的知識有了系統的認識和學習,今天我們將接著來看一下python中的異常。(一)Bug的由來和分類    "Bug"一詞的原意是"昆蟲"或"蟲子";而在電腦系統或程序中隱藏著的一些未被發現的缺陷或問題,人們也叫它"bug"。
  • Python異常處理
    解決方案首先我們要了解異常才能處理異常那我們來就說一說異常的定義:程序運行過程中出現的錯誤或遇到的意外情況其次是錯誤的類型分別有:語法錯誤、運行錯誤、邏輯錯誤而我們通常出錯的理由無非是這些:輸入錯誤、下標越界、類型錯誤、操作不當等等接著我們來看一看報錯的構成吧接下來我們的重點來了,在python異常處理會用到
  • Python系列特別篇-錯誤和異常
    即便是語法、縮進都是OK的,也不代表程序就能夠在運行時不會引發錯誤。在執行時檢測到的錯誤被稱為 異常,異常並不致命,但我們仍然需要學會處理它。結合上面的例子,我們梳理一下try 語句的工作原理:執行 try 子句(語句塊) :try 和 except 關鍵字之間的語句如果沒有異常發生,則執行完 try 語句,並跳過 except 子句 。如果在執行 try 子句時發生了異常,則跳過該子句中剩下的部分。
  • python基礎---異常處理
    程序的異常處理今天霖小白心血來潮想來分享一下python基礎中的如何異常處理,使程序有更好的用戶體驗。前言python程序對用戶的輸入有一定的要求,所以當實際輸入不滿足程序要求時,可能在程序運行過程中會直接報錯無法進行下一步的運行。
  • python入門學習異常處理類型
    前言異常是指在程序執行過程中發生的一個事件,影響了程序的正常執行,例如:0做了分母。異常是Python對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。在Java語言中我們知道異常的常用結構為try catch組成,有時也會用到finally,那麼在python中異常是如何來處理的呢?python中的異常處理1.python異常簡單語法python異常的簡單語法為try-except-else語法,注意這裡的關鍵字是except而不是Exception,這與java是有區別的。
  • python面向對象之異常處理
    捕獲異常 2.1 簡單的捕獲異常語法 在程序開發中,如果 對某些代碼的執行不能確定是否正確,可以增加 `try(嘗試)` 來 捕獲異常 捕獲異常最簡單的語法格式:```pythontry: 嘗試執行的代碼except: 出現錯誤的處理``` `try
  • Python-異常與錯誤
    錯誤信息的前面部分顯示了異常發生的上下文,並以調用棧的形式顯示具體信息。異常處理try-except異常捕捉可以使用 try/except 語句。如果在執行 try 子句的過程中發生了異常,那麼 try 子句餘下的部分將被忽略。如果異常的類型和 except 之後的名稱相符,那麼對應的 except 子句將被執行。如果一個異常沒有與任何的 except 匹配,那麼這個異常將會傳遞給上層的 try 中。一個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。
  • 一篇文章幫你搞定Python異常處理
    =1+'str'什麼是異常異常就是程序運行時發生錯誤的信號,在python中,錯誤觸發的異常如下Python中異常種類在python中不同的異常可以用不同的類型(python中統一了類與類型,類型即類)去標識,不同的類對象標識不同的異常,一個異常標識一種錯# 觸發IndexErrorl=['run1','aa']
  • python 異常處理
    當Python檢測到一個錯誤時,解釋器就無法繼續執行了,反而出現了一些錯誤的提示,這就是所謂的"異常"捕獲異常<1>捕獲異常 try...except...看如下示例:try: print('test--1---') open('123.txt','r') print('test--2---')except IOError: pass說明:此程序看不到任何錯誤,因為用except 捕獲到了IOError異常,並添加了處理的方法pass 表示實現了相應的實現,但什麼也不做;如果把pass
  • python異常處理與上下文管理器
    異常處理異常與錯誤錯誤可以通過IDE或者解釋器給出提示的錯誤opentxt('a.jpg','r')語法層面沒有問題,但是自己代碼的邏輯有問題if age>18: print('未成年')異常多指在程序執行過程中,出現的未知錯誤,語法和邏輯本身是正確的。
  • 想通過python面試環節,必須懂得異常原理
    =0: print(a/b)print('End')我們也可以通過python的異常處理機制來解決這個問題。在python中捕捉異常可以使用try/except語句。try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息並處理。