python面向對象之異常處理

2021-01-07 python大蛇

異常

目標

異常的概念 捕獲異常 異常的傳遞 拋出異常

01. 異常的概念

程序在運行時,如果 `Python 解釋器` 遇到 到一個錯誤,會停止程序的執行,並且提示一些錯誤信息,這就是 異常

程序停止執行並且提示錯誤信息 這個動作,我們通常稱之為:拋出(raise)異常

> 程序開發時,很難將 所有的特殊情況 都處理的面面俱到,通過 異常捕獲 可以針對突發事件做集中的處理,從而保證程序的 穩定性和健壯性

02. 捕獲異常

2.1 簡單的捕獲異常語法

在程序開發中,如果 對某些代碼的執行不能確定是否正確,可以增加 `try(嘗試)` 來 捕獲異常

捕獲異常最簡單的語法格式:

```python

try:

嘗試執行的代碼

except:

出現錯誤的處理

```

`try` 嘗試,下方編寫要嘗試代碼,不確定是否能夠正常執行的代碼

`except` 如果不是,下方編寫嘗試失敗的代碼

簡單異常捕獲演練 —— 要求用戶輸入整數

```python

try:

提示用戶輸入一個數字

num = int(input("請輸入數字:"))

except:

print("請輸入正確的數字")

```

2.2 錯誤類型捕獲

在程序執行時,可能會遇到 不同類型的異常,並且需要 針對不同類型的異常,做出不同的響應,這個時候,就需要捕獲錯誤類型了

語法如下:

```python

try:

嘗試執行的代碼

pass

except 錯誤類型1:

針對錯誤類型1,對應的代碼處理

pass

except (錯誤類型2, 錯誤類型3):

針對錯誤類型2 和 3,對應的代碼處理

pass

except Exception as result:

print("未知錯誤 %s" % result)

```

當 `Python` 解釋器 拋出異常 時,最後一行錯誤信息的第一個單詞,就是錯誤類型

異常類型捕獲演練 —— 要求用戶輸入整數

需求

1. 提示用戶輸入一個整數

2. 使用 `8` 除以用戶輸入的整數並且輸出

```python

try:

num = int(input("請輸入整數:"))

result = 8 / num

print(result)

except ValueError:

print("請輸入正確的整數")

except ZeroDivisionError:

print("除 0 錯誤")

```

捕獲未知錯誤

在開發時,要預判到所有可能出現的錯誤,還是有一定難度的

如果希望程序 無論出現任何錯誤,都不會因為 `Python` 解釋器 拋出異常而被終止,可以再增加一個 `except`

語法如下:

```python

except Exception as result:

print("未知錯誤 %s" % result)

```

2.3 異常捕獲完整語法

在實際開發中,為了能夠處理複雜的異常情況,完整的異常語法如下:

> 提示:

> 有關完整語法的應用場景,在後續學習中,結合實際的案例會更好理解

> 現在先對這個語法結構有個印象即可

```python

try:

嘗試執行的代碼

pass

except 錯誤類型1:

針對錯誤類型1,對應的代碼處理

pass

except 錯誤類型2:

針對錯誤類型2,對應的代碼處理

pass

except (錯誤類型3, 錯誤類型4):

針對錯誤類型3 和 4,對應的代碼處理

pass

except Exception as result:

列印錯誤信息

print(result)

else:

沒有異常才會執行的代碼

pass

finally:

無論是否有異常,都會執行的代碼

print("無論是否有異常,都會執行的代碼")

```

`else` 只有在沒有異常時才會執行的代碼

`finally` 無論是否有異常,都會執行的代碼

之前一個演練的 完整捕獲異常 的代碼如下:

```python

try:

num = int(input("請輸入整數:"))

result = 8 / num

print(result)

except ValueError:

print("請輸入正確的整數")

except ZeroDivisionError:

print("除 0 錯誤")

except Exception as result:

print("未知錯誤 %s" % result)

else:

print("正常執行")

finally:

print("執行完成,但是不保證正確")

```

03. 異常的傳遞

異常的傳遞 —— 當 函數/方法 執行 出現異常,會 將異常傳遞 給 函數/方法 的 調用一方

如果 傳遞到主程序,仍然 沒有異常處理,程序才會被終止

> 提示

在開發中,可以在主函數中增加 異常捕獲

而在主函數中調用的其他函數,只要出現異常,都會傳遞到主函數的 異常捕獲 中

這樣就不需要在代碼中,增加大量的 異常捕獲,能夠保證代碼的整潔

需求

1. 定義函數 `demo1()` 提示用戶輸入一個整數並且返回

2. 定義函數 `demo2()` 調用 `demo1()`

3. 在主程序中調用 `demo2()`

```python

def demo1():

return int(input("請輸入一個整數:"))

def demo2():

return demo1()

try:

print(demo2())

except ValueError:

print("請輸入正確的整數")

except Exception as result:

print("未知錯誤 %s" % result)

```

04. 拋出 `raise` 異常

4.1 應用場景

在開發中,除了 代碼執行出錯 `Python` 解釋器會 拋出 異常之外

還可以根據 應用程式 特有的業務需求 主動拋出異常

示例

提示用戶 輸入密碼,如果 長度少於 8,拋出 異常

注意

當前函數 只負責 提示用戶輸入密碼,如果 密碼長度不正確,需要其他的函數進行額外處理

因此可以 拋出異常,由其他需要處理的函數 捕獲異常

4.2 拋出異常

`Python` 中提供了一個 `Exception` 異常類

在開發時,如果滿足 特定業務需求時,希望 拋出異常,可以:

1. 創建 一個 `Exception` 的 對象

2. 使用 `raise` 關鍵字 拋出 異常對象

需求

定義 `input_password` 函數,提示用戶輸入密碼

如果用戶輸入長度 < 8,拋出異常

如果用戶輸入長度 >=8,返回輸入的密碼

```python

def input_password():

1. 提示用戶輸入密碼

pwd = input("請輸入密碼:")

2. 判斷密碼長度,如果長度 >= 8,返回用戶輸入的密碼

if len(pwd) >= 8:

return pwd

3. 密碼長度不夠,需要拋出異常

1> 創建異常對象 - 使用異常的錯誤信息字符串作為參數

ex = Exception("密碼長度不夠")

2> 拋出異常對象

raise ex

try:

user_pwd = input_password()

print(user_pwd)

except Exception as result:

print("發現錯誤:%s" % result)

相關焦點

  • python入門——Python中異常處理
    python大數據課堂已經開始了。想轉行大數據,數據挖掘,機器學習,人工智慧的小夥伴可以關注啦。上一篇帶大家了解了python中的I/O函數。今天我們來繼續了解python中的異常處理。調試環境以python3.6環境為例。需要代碼和demo的朋友可以搜索「欒鵬全棧」到我的CSDN博客。
  • opencv-python獲取圖像:面向對象與面向過程
    讀取圖片學過數字圖像處理的小夥伴應該很熟悉,在數字圖像處理課上,這是一張標準的測試圖片。下面是分別用面向過程與面向對象的編程方法實現讀取本地圖像和打開攝像頭兩段代碼:# -*- coding: utf-8 -*-"""面向過程的編程方法,用函數把解決問題的步驟一步一步實現。
  • python 異常處理
    對於python來說,就是工廠類被具體工廠繼承。這樣在簡單工廠模式裡集中在工廠方法上的壓力可以由工廠方法模式裡不同的工廠子類來分擔。抽象的工廠類提供了一個創建對象的方法,也叫作工廠方法。1) 抽象工廠角色(Factory): 這是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實現的接口或者必須繼承的父類。
  • python入門學習異常處理類型
    前言異常是指在程序執行過程中發生的一個事件,影響了程序的正常執行,例如:0做了分母。異常是Python對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。在Java語言中我們知道異常的常用結構為try catch組成,有時也會用到finally,那麼在python中異常是如何來處理的呢?python中的異常處理1.python異常簡單語法python異常的簡單語法為try-except-else語法,注意這裡的關鍵字是except而不是Exception,這與java是有區別的。
  • Python異常處理
    解決方案首先我們要了解異常才能處理異常那我們來就說一說異常的定義:程序運行過程中出現的錯誤或遇到的意外情況其次是錯誤的類型分別有:語法錯誤、運行錯誤、邏輯錯誤而我們通常出錯的理由無非是這些:輸入錯誤、下標越界、類型錯誤、操作不當等等接著我們來看一看報錯的構成吧接下來我們的重點來了,在python異常處理會用到
  • Python面向對象程式語言
    Python (發音:[ 'paiθ(ə)n; (US) 'paiθɔn ]n.蟒蛇,巨蛇 ),是一種面向對象的解釋性的電腦程式設計語言,也是一種功能強大而完善的通用型語言,已經具有十多年的發展歷史面向對象————Python即支持面向過程的編程也支持面向對象的編程。在「面向過程」的語 言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在「面向對象」的語言中,程序是由數據和功能組合而成的對象構建起來的。與其他主要的語言如 C++和Java相比,Python以一種非常強大又簡單的方式實現面向對象編程。
  • 一篇文章幫你搞定Python異常處理
    =1+'str'什麼是異常異常就是程序運行時發生錯誤的信號,在python中,錯誤觸發的異常如下Python中異常種類在python中不同的異常可以用不同的類型(python中統一了類與類型,類型即類)去標識,不同的類對象標識不同的異常,一個異常標識一種錯# 觸發IndexErrorl=['run1','aa']
  • 一文看懂Python異常處理(exception, try和raise語句)
    Python 語法錯誤TypeError 對類型無效的操作ValueError 傳入無效的參數ZeroDivisionError 除(或取模)零 (所有數據類型)完整內置異常見下圖:異常處理沒有異常處理的特點是出現異常會終止程序執行。
  • Python入門基礎之面向對象二:類和實例、方法
    前面一篇文章我介紹了python面向對象的基本知識,連結在最下面。初步解釋了面向對象和面向對象的優點,今天就開始正式用代碼來展現面向對象。1、利用class創建類Python中,創建類的語句是如下所示先解釋一下,class後面跟的是類名,括號裡面是基類(也成為父類)python3中默認繼承object。
  • python基礎---異常處理
    程序的異常處理今天霖小白心血來潮想來分享一下python基礎中的如何異常處理,使程序有更好的用戶體驗。前言python程序對用戶的輸入有一定的要求,所以當實際輸入不滿足程序要求時,可能在程序運行過程中會直接報錯無法進行下一步的運行。
  • python教程之九錯誤和異常處理
    大多數的異常都不會被程序處理,都以錯誤信息的形式展現在這裡:>>> 10 * (1/0)Traceback (most recent call last):File "<pyshell#78>", line 1, in <module>10 * (1/0)ZeroDivisionError
  • 十、python基礎之異常處理結構與程序調試方法
    實驗目的:學習python的異常處理和程序調試實驗環境:已正確安裝python3.51、異常的基本概念異常是指程序運行時引發的錯誤,得不到正確的處理將會導致程序終止運行合理地使用異常處理結構可以使得程序更加健壯,具有更強的容錯性。例如:最常見的除數為0,python會拋出「ZeroDivisionError"異常。
  • [Python]文件與異常的錯誤處理
    [Python]文件與異常的錯誤處理1.文件的處理過程# 文件基本操作:打開文件,處理文件,關閉文件the_file = open("sketch.txt", 'r')line_content = the_file.readline()  # 不指定readline的參數,讀取一整行print(line_content)
  • 深入 Python 異常處理
    【導語】:本文結合例程總結Python異常處理的相關知識,幫你深入理解python異常處理。在Python 中的錯誤和異常是什麼?通常來說,程序中的錯誤至少包括兩種,一種是語法錯誤,另一種則是異常。keyError 字典的鍵找不到和FileNotFoundError 文件不存在try except使用Python的異常處理語句,可以非常優雅地處理發生的異常。
  • python異常處理與上下文管理器
    作者丨王翔丨來研丨清風Pythonpython異
  • python面向對象,小白從零開始,python基礎入門,你會了嗎?
    Python,是一種面向對象的解釋型電腦程式設計語言,以簡單、易學、速度快等優點,是大部分想進入IT行業的從業人的選擇。IEEE發布2017年程式語言排行榜:Python超過JAVA程式語言排名第一。所以Python非常熱門的程式語言!
  • python面向對象中的self,cls,staticmethod,classmethod
    先給大家拜年,新年第一篇繼續我複習面向對象的知識,這次打算說說我疑惑挺久的self,cls,staticmethod,classmethod是幹嘛的
  • 從零入門量化交易系列-python的面向對象
    1、面向對象基礎概念類(Class): 用來描述具有相同屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。
  • 面向對象特性之三:多態(Python進階教程)
    今天我們要講一講面向對象的第三個特性:多態;什麼叫做多態?從字面意思上理解,就是一個函數具有多種形態。本質上其實就是同一操作方法作用於不同的對象時,有著不同的解釋,執行不同的邏輯,產生不同的結果。這兩個類實例化對象後,都調用各自的「送貨」方法後,我們看到,輸出的結果是不一樣的,也就是說,它們分別執行了各自類中的方法。
  • python面向對象三大特徵
    大概所有變成初學者初學者最頭疼的第一道坎就是面向對象的理解封裝從封裝本身去理解 就是把小貓小狗用袋子裝起來,然後把袋子的小口封上私有化方法:方法的私有化可以保護好一些核心的代碼,可以添加條件,是別人不能不滿足條件的更改,進行代碼的保護,python