首頁 後端開發 Python教學 python中異常有哪些? python中異常的詳細介紹

python中異常有哪些? python中異常的詳細介紹

Sep 26, 2018 pm 03:54 PM

本篇文章帶給大家的內容是關於python中異常有哪些? python中異常的詳細介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

python的異常分為兩種,1)、語法錯誤,在python解釋器的語法檢測中不通過不能運行代碼    2)、異常,python程序運行期檢測到的錯誤被稱為異常。在沒有做異常處理時,將終止程序並提示異常信息,如:①字符串轉換為數字時的類型轉換異常,②文件讀取時的文件不存在異常,③網絡鏈接時主機不可達異常·· ·等。當Python腳本發生異常時我們需要捕獲處理它,否則程式會終止執行。 畢竟誰也不希望用著的程式突然的就崩了

#1、語法錯誤

python的文法錯誤是許多初學者常遇到的問題,這類錯誤比較低階,只要多敲幾遍程式碼就可以減少這樣的錯誤

##

>>> if Trur
  File "<stdin>", line 1
    if Trur
          ^
SyntaxError: invalid syntax
>>> print("as"))
  File "<stdin>", line 1
    print("as"))
               ^
SyntaxError: invalid syntax
登入後複製

如:出現這樣的錯誤就是語法錯誤,第1行結尾if語句缺少":",第6行結尾多了")"

2、異常

1)運行期偵測到的錯誤稱為異常,python的語法偵測無法檢查這樣的錯誤。

>>> int("aa")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: &#39;aa&#39;
>>> f = open("aaa.txt","r")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: &#39;aaa.txt&#39;
登入後複製

其中第1行,第5行都是出現異常的地方,看一下異常的輸出訊息,如下圖

2)python的標準異常類別

BaseException 為所有異常的基類,Exception 為常規錯誤的基類

#其它python的異常類,就不再一一的述說,可以百度查看

3、異常處理

為了提高程式的健全性,不讓程式出現異常時出現崩潰的情況,在必要時需要進行例外處理

1)try-except:語句

①、最簡單的例外處理語句如下,當try的語句區塊中有異常出現時,下邊的語句將不再執行(第3行),異常被except捕獲,執行except中的語句塊後繼續向下執行程序(如第6行)。註:except後邊不跟異常的類型,預設捕捉所有的異常

try:
    int("aaa")
    print("---aaa---")
except:
    print("出现异常-->英文字母不能转换为数字")
print("----------")
# 输出结果
出现异常-->英文字母不能转换为数字
----------
登入後複製

#②、多分支異常,當我們需要捕獲不同的異常時可以用多個except來實現,需要取得異常的資訊可透過as 變數名稱得到異常的對象,如第7行

try:
    nu = int("100")
    print("转换后的值nu:", nu)
    i = 1 / 0
except ValueError:
    print("出现异常-->英文字母不能转换为数字")
except ZeroDivisionError as e:  # 通过 as 变量名 获取异常的对象
    print("出现异常-->除数不能为零")
    print("异常的提示信息-->", e)
except:
    pass
print("----------")


# 输出结果
转换后的值nu: 100
出现异常-->除数不能为零
异常的提示信息--> division by zero
----------
登入後複製

③、當我們需要將多個例外按相同的處理方式可以使用  except (ValueError, [ZeropisionError [, NameError]]):

try:
    i = 1 / 0
    nu = int("aa")
except (ValueError, ZeroDivisionError) as e:
    print(e)
except:
    pass
print("----------")


# 输出结果
division by zero
----------
登入後複製

2)try-except-else-finally 語句

#①、當try-except-else-finally中出現了finally語句,不管是否出現異常finally語句區塊中的語句一定會執行,而else中的語句只有不出現異常是才會執行

出現異常時try-except-else-finally如下

try:
    i = 1 / 0
    print("没有出现异常i值", i)
except Exception as e:
    print("出现异常-->", e)
else:
    print("没有出现异常-->执行else")
finally:
    print("不管是否出现异常,这里的语句一定会被执行")


# 输出结果
出现异常--> division by zero
不管是否出现异常,这里的语句一定会被执行
登入後複製

沒有出現異常時try-except-else-finally如下

try:
    i = 1 / 1
    print("没有出现异常i值", i)
except Exception as e:
    print("出现异常-->", e)
else:
    print("没有出现异常-->执行else")
finally:
    print("不管是否出现异常,这里的语句一定会被执行")


# 输出结果
没有出现异常i值 1.0
没有出现异常-->执行else
不管是否出现异常,这里的语句一定会被执行
登入後複製

②、try-except-else-finally還可以拆開使用,有三種形式1)try-except-finally   2)try-except-else    3)try-finally。這裡就不展示程式碼了

4、異常的傳遞

#在發生例外的語句中沒有處理例外的語句,例外將會向上層傳遞,直到遇到處理異常的語句,或python解釋器終止程式

def test2():
    int("aa")

def test1():
    test2()

try:
    test1()
except Exception as e:
    print(e)
print("-----------")


# 输出结果
invalid literal for int() with base 10: &#39;aa&#39;
-----------
登入後複製

#如上test2中第2行出現異常,將向第5行呼叫test2的語句處傳遞,這裡依舊沒有異常處理語句,將繼續往上層傳遞到第8行處被except捕獲

5、拋出異常raise

#1)拋出python已定義的異常

透過raise 異常類型即可拋出一個異常,拋出的異常也會被except捕獲。如下邊第4行

age = 500
try:
    if age < 0 or age > 200:
        raise ValueError("age范围0-200")
    print("age", age)
except ValueError as e:
    print("出现异常-->", e)
# 输出结果
出现异常--> age范围0-200
登入後複製

2)拋出自定義例外#

抛出自定义异常首先得有个自定义的异常类,注:自定义的异常必须直接或间接的继承Exception基类

class MyException(Exception):  # 自定义异常类
    def __init__(self, msg):
        self.msg = msg


age = 500
try:
    if age < 0 or age > 200:
        raise MyException("age范围0-200")  # 抛出自定义异常
    print("age", age)
except MyException as e:
    print("出现异常-->", e)


# 输出结果
出现异常--> age范围0-200
登入後複製

当然自定义异常类也可以拥有许多的功能,就得看需求添加啦

6、在异常处理中抛出异常

有某需求:当捕获到异常时处理完后想继续抛出异常.....

在except中用raise可以抛出当前异常

try:
    i = 1 / 0  # 异常的语句
except Exception as e:
    print("出现异常-->", e)
    raise  # 处理完后继续抛出异常,raise表示抛出当前异常
print("-------------")


# 输出结果
出现异常--> division by zero
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
    i = 1 / 0
ZeroDivisionError: division by zero
登入後複製

以上是python中異常有哪些? python中異常的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何解決Linux終端中查看Python版本時遇到的權限問題? 如何解決Linux終端中查看Python版本時遇到的權限問題? Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? 如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? 在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? 如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

在Linux終端中使用python --version命令時如何解決權限問題? 在Linux終端中使用python --version命令時如何解決權限問題? Apr 02, 2025 am 06:36 AM

Linux終端中使用python...

如何繞過Investing.com的反爬蟲機制獲取新聞數據? 如何繞過Investing.com的反爬蟲機制獲取新聞數據? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...

See all articles