python基礎學習15----異常處理

来源:https://www.cnblogs.com/sfencs-hcy/archive/2018/09/19/9675834.html
-Advertisement-
Play Games

異常處理,是編程語言或電腦硬體里的一種機制,用於處理軟體或信息系統中出現的異常狀況(即超出程式正常執行流程的某些特殊條件)。 1.異常的類型 異常的類型多種多樣,常見的異常有: 其他的異常: Exception可以捕獲任意異常 2.捕獲異常,處理異常 只有將對應的異常類型捕獲才能進行異常的處理 異 ...


異常處理,是編程語言或電腦硬體里的一種機制,用於處理軟體或信息系統中出現的異常狀況(即超出程式正常執行流程的某些特殊條件)。

1.異常的類型

異常的類型多種多樣,常見的異常有:

AttributeError 試圖訪問一個對象沒有的屬性,比如foo.x,但是foo沒有屬性x
IOError 輸入/輸出異常;基本上是無法打開文件
ImportError 無法引入模塊或包;基本上是路徑問題或名稱錯誤
IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊
IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
KeyError 試圖訪問字典里不存在的鍵
KeyboardInterrupt Ctrl+C被按下
NameError 嘗試訪問一個沒有申明的變數
SyntaxError Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了)
TypeError 傳入對象類型與要求的不符合
UnboundLocalError 試圖訪問一個還未被設置的局部變數,基本上是由於另有一個同名的全局變數,導致你以為正在訪問它
ValueError 傳入一個調用者不期望的值,即使值的類型是正確的

 

其他的異常:

Exception可以捕獲任意異常

BaseException    所有異常的基類
SystemExit    解釋器請求退出
KeyboardInterrupt    用戶中斷執行(通常是輸入^C)
Exception    常規錯誤的基類
StopIteration    迭代器沒有更多的值
GeneratorExit    生成器(generator)發生異常來通知退出
StandardError    所有的內建標準異常的基類
ArithmeticError    所有數值計算錯誤的基類
FloatingPointError    浮點計算錯誤
OverflowError    數值運算超出最大限制
ZeroDivisionError    除(或取模)零 (所有數據類型)
AssertionError    斷言語句失敗
AttributeError    對象沒有這個屬性
EOFError    沒有內建輸入,到達EOF 標記
EnvironmentError    操作系統錯誤的基類
IOError    輸入/輸出操作失敗
OSError    操作系統錯誤
WindowsError    系統調用失敗
ImportError    導入模塊/對象失敗
LookupError    無效數據查詢的基類
IndexError    序列中沒有此索引(index)
KeyError    映射中沒有這個鍵
MemoryError    記憶體溢出錯誤(對於Python 解釋器不是致命的)
NameError    未聲明/初始化對象 (沒有屬性)
UnboundLocalError    訪問未初始化的本地變數
ReferenceError    弱引用(Weak reference)試圖訪問已經垃圾回收了的對象
RuntimeError    一般的運行時錯誤
NotImplementedError    尚未實現的方法
SyntaxError    Python 語法錯誤
IndentationError    縮進錯誤
TabError    Tab 和空格混用
SystemError    一般的解釋器系統錯誤
TypeError    對類型無效的操作
ValueError    傳入無效的參數
UnicodeError    Unicode 相關的錯誤
UnicodeDecodeError    Unicode 解碼時的錯誤
UnicodeEncodeError    Unicode 編碼時錯誤
UnicodeTranslateError    Unicode 轉換時錯誤
Warning    警告的基類
DeprecationWarning    關於被棄用的特征的警告
FutureWarning    關於構造將來語義會有改變的警告
OverflowWarning    舊的關於自動提升為長整型(long)的警告
PendingDeprecationWarning    關於特性將會被廢棄的警告
RuntimeWarning    可疑的運行時行為(runtime behavior)的警告
SyntaxWarning    可疑的語法的警告
UserWarning    用戶代碼生成的警告

2.捕獲異常,處理異常

只有將對應的異常類型捕獲才能進行異常的處理

異常的捕獲處理方式:

try:
    #程式執行的代碼,異常檢測的代碼
    pass
except Exception as e:
    #捕獲異常後進行的代碼,
    print(e)
    pass
else:
    #沒有捕獲到相應的異常後進行的代碼
    pass
finally:
    #不論有沒有異常捕獲最後都要執行的代碼
    pass

 

這裡的except就像是java里的catch

也可以在代碼中添加多個except語句來捕獲不同種類型的異常,執行相應不同的操作

3.主動拋出異常

異常的拋出可以手動添加

try:
    raise Exception("我自己拋的")
except Exception as e:
    print(e)#這裡會輸出“我自己拋的”

 

4.自定義異常類型 

異常的類型我們可以自己定義自己所需要的

主要利用類中的__str__方法實現

 

class myException(BaseException):
    def __init__(self,message):
        self.message=message
    def __str__(self):
        return self.message

try:
    raise myException('自定義的異常類型')
except myException as e:
    print(e) 

 

5.斷言

斷言assert用於判斷某個條件是否成立,如果不成立則拋出AssertionError異常,該異常可以捕獲

 

assert 條件
#相當於
if not 條件 :
    raise AssertionError()

assert 條件,"描述"
#相當於
if not 條件 :
    raise AssertionError("描述")

 

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • input()函數1.等待輸入;2.將輸入的內容賦值給了等於號前面的變數;3.input返回的數據類型是str。 ...
  • 之前裝好tomcat後正常運行 後來重裝系統後,又一次配置環境時卻報錯。 在網上查找了兩篇文章。 https://blog.csdn.net/haleyliu123/article/details/68953796 https://blog.csdn.net/qq_28688909/article/ ...
  • 電腦處理不同的數據需要定義不同的數據類型。改變數字數據類型的值,意味著要重新分配記憶體空間用來存儲新的數值。 int,整數包含正整數和負整數,32位和64位系統的取值範圍不同。32位系統的取值範圍:-2**31 ~ 2**31-164位系統的取值範圍:-2**63 ~ 2**63-1 long,長整 ...
  • 上篇我們知道了關於python的一個hello world的簡單程式代碼,現在我們來瞭解關於python裡面的變數,我們來瞭解下,變數是什麼? 變數:變數是為了存儲程式運算過程中的一些中間結果,為了方便之後的調用,同一變數可以重新賦值。 變數的特點:具有描述性的標記,存儲在記憶體里。 我們來看個列子, ...
  • 前言 大學期間接觸 Java 的時間也不短了,不論學習還是實習,都讓我發覺基礎的重要性。互聯網發展太快了,各種框架各種技術更新迭代的速度非常快,可能你剛好掌握了一門技術的應用,它卻已經走在淘汰的邊緣了。 而學習新技術總要付出一定的時間成本,那麼怎麼降低時間成本呢?那就是打好基礎,技術再怎麼革新,底層 ...
  • 創建laravel應用 laravel new app_name 使用 PHP 內置 web server 驅動我們的網站 cd xxx/public php -S localhost:port 查看所有可用的 Artisan 命令 php artisan list 激活某些功能 eg:auth系統 ...
  • 題意 題目鏈接 給出一個字元串,每次操作可以使得字元串縮短一位,且第$i$位必須要保證與變換前的這一位或下一位相同, 問使得整個字元串全相同最少的操作次數 Sol 300P的題我都要想10min啊,還是太菜了。。 首先我們可以枚舉一個字母,強行讓他成為最後的答案 對於末尾與它不同的數只能一個個刪掉, ...
  • import requests from requests.exceptions import RequestException import re import json from multiprocessing import Pool def get_one_page(url): headers... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...