色婷婷AV无码久久精品,久久天天躁狠狠躁夜夜97,羞羞麻豆国产精品1区2区3区,啪影院免费线观看视频,思思久久er99精品亚洲

常州機(jī)器視覺(jué)培訓(xùn)

常州上位機(jī)軟件開(kāi)發(fā)

常州工業(yè)機(jī)器人編程設(shè)計(jì)培訓(xùn)

常州PLC培訓(xùn)

常州PLC

常州PLC編程培訓(xùn)

常州電工培訓(xùn)

常州和訊plc培訓(xùn)中心歡迎您!
當(dāng)前位置:網(wǎng)站首頁(yè) > 新聞中心 新聞中心
Python異常處理(上)-常州上位機(jī)學(xué)習(xí),常州機(jī)器視覺(jué)學(xué)習(xí)
日期:2024-5-14 16:39:39人氣:  標(biāo)簽:常州上位機(jī)學(xué)習(xí) 常州機(jī)器視覺(jué)學(xué)習(xí)

前言

在編寫程序時(shí),我們經(jīng)常會(huì)遇到一些不可控的情況,比如文件不存在、網(wǎng)絡(luò)連接中斷等。異常處理機(jī)制可以幫助我們優(yōu)雅地處理這些情況,而不是讓程序直接崩潰。

一、什么是異常?

異常是程序在執(zhí)行過(guò)程中遇到的錯(cuò)誤,它們可以由多種原因引起,比如語(yǔ)法錯(cuò)誤、運(yùn)行時(shí)錯(cuò)誤、外部設(shè)備故障等。


Python中的異常是Exception類的實(shí)例,它們可以被分類為不同的類型,每種類型對(duì)應(yīng)特定的錯(cuò)誤情況。


1.1 異常處理機(jī)制

異常是在程序執(zhí)行期間發(fā)生的事件,它會(huì)打斷正常的程序流程。而異常處理提供了一種機(jī)制,使得程序能夠從錯(cuò)誤中恢復(fù),而不是直接崩潰。


1.2 異常的分類

在Python中,異?梢员环譃閹讉(gè)主要的類別:


語(yǔ)法錯(cuò)誤:這些錯(cuò)誤發(fā)生在編寫代碼時(shí),比如拼寫錯(cuò)誤、缺少括號(hào)等。語(yǔ)法錯(cuò)誤通常在程序執(zhí)行前被解釋器發(fā)現(xiàn),并且阻止程序運(yùn)行。

系統(tǒng)退出:如SystemExit,通常由sys.exit()函數(shù)引發(fā),用于終止程序。

致命錯(cuò)誤:如KeyboardInterrupt,當(dāng)用戶嘗試通過(guò)敲擊中斷字符(如Ctrl+C)終止當(dāng)前程序時(shí)引發(fā)。

標(biāo)準(zhǔn)異常:Python定義了一組標(biāo)準(zhǔn)的異常類型,如ValueError、TypeError、IndexError等,用于表示常見(jiàn)的錯(cuò)誤情況。

IO相關(guān)異常:如IOError(在Python 3中被OSError取代),用于處理與文件和輸入輸出操作相關(guān)的錯(cuò)誤。

邏輯錯(cuò)誤:這些錯(cuò)誤是由于程序邏輯上的缺陷導(dǎo)致的,它們不會(huì)立即被Python解釋器發(fā)現(xiàn),可能需要在程序運(yùn)行過(guò)程中才能發(fā)現(xiàn)。

自定義異常:用戶可以根據(jù)需要定義自己的異常類型,通常通過(guò)繼承Exception類或其子類來(lái)實(shí)現(xiàn)。

1.3 標(biāo)準(zhǔn)異常類型

Python的標(biāo)準(zhǔn)異常類型被組織成繼承層次結(jié)構(gòu),其中所有異常類型都繼承自BaseException類。以下是一些常見(jiàn)的標(biāo)準(zhǔn)異常類型:


ArithmeticError:算術(shù)錯(cuò)誤,如除以零。

AssertionError:斷言失敗。

AttributeError:嘗試訪問(wèn)對(duì)象不存在的屬性。

IOError:輸入輸出操作失。ㄔ赑ython 3中被OSError取代)。

IndexError:序列(如列表、字符串)索引超出范圍。

KeyError:嘗試訪問(wèn)字典中不存在的鍵。

MemoryError:內(nèi)存不足。

NameError:嘗試訪問(wèn)未定義的變量。

OverflowError:數(shù)值運(yùn)算結(jié)果太大。

RuntimeError:一般的運(yùn)行時(shí)錯(cuò)誤。

SyntaxError:語(yǔ)法錯(cuò)誤。

SystemExit:請(qǐng)求退出程序。

TypeError:不匹配的類型導(dǎo)致的錯(cuò)誤。

ValueError:傳入不正確的值導(dǎo)致的錯(cuò)誤。

示例代碼


try:

    # 嘗試訪問(wèn)一個(gè)不存在的變量

    print(some_undefined_variable)

except NameError as e:

    print("捕獲到一個(gè)NameError異常:", e)


try:

    # 嘗試訪問(wèn)列表中不存在的索引

    my_list = [1, 2, 3]

    print(my_list[3])

except IndexError as e:

    print("捕獲到一個(gè)IndexError異常:", e)


try:

    # 嘗試將字符串和整數(shù)相加

    print("Hello" + 123)

except TypeError as e:

    print("捕獲到一個(gè)TypeError異常:", e)

通過(guò)了解異常的概念和分類,我們可以更好地編寫能夠處理錯(cuò)誤的程序。異常處理是Python編程中的一個(gè)重要部分,它允許我們以一種結(jié)構(gòu)化和可預(yù)測(cè)的方式處理程序運(yùn)行時(shí)可能出現(xiàn)的問(wèn)題。

二、異常的捕獲和處理

2.1 try-except語(yǔ)句

try代碼塊中的代碼是可能會(huì)拋出異常的代碼。如果在try代碼塊中發(fā)生異常,程序?qū)⒉粫?huì)崩潰,而是跳轉(zhuǎn)到except代碼塊中執(zhí)行異常處理代碼。


基本格式


try:

    # 可能會(huì)拋出異常的代碼

    result = 10 / 0

except ZeroDivisionError:

    # 當(dāng)發(fā)生除以零錯(cuò)誤時(shí)執(zhí)行的代碼

    print("不能除以零!")

你也可以使用多個(gè)except語(yǔ)句中指定異常類型,以捕獲多個(gè)特定類型的異常。


try:

    number = int(input("請(qǐng)輸入一個(gè)數(shù)字:"))

    result = 10 / number

except ValueError:

    # 捕獲ValueError異常,如輸入非數(shù)字字符

    print("請(qǐng)輸入一個(gè)有效的數(shù)字。")

except ZeroDivisionError:

    # 捕獲除以零錯(cuò)誤

    print("不能除以零!")

2.2 其他語(yǔ)句

1.else語(yǔ)句:else代碼塊中的代碼僅在try塊中沒(méi)有發(fā)生任何異常時(shí)執(zhí)行;

try:

    result = 10 / 2

except ZeroDivisionError:

    print("除以零錯(cuò)誤。")

else:

    print("除法成功,結(jié)果是:", result)

2.finally子句:finally代碼塊中的代碼無(wú)論是否發(fā)生異常都會(huì)執(zhí)行,通常用于執(zhí)行清理工作;

 try:

     file = open('example.txt', 'r')

     data = file.read()

 except IOError:

     print("文件讀取錯(cuò)誤。")

 finally:

     file.close()

     print("文件已關(guān)閉。")

3.異常的重拋:在except代碼塊中,可以使用raise關(guān)鍵字來(lái)重拋當(dāng)前異常。

try:

    # ...

except SomeException as e:

    print("Handling exception")

    raise  # 重拋當(dāng)前的SomeException

4.異常鏈:在Python 3中,使用raise ... from ...語(yǔ)法可以在引發(fā)新異常的同時(shí)保留原始異常的上下文,這稱為異常鏈。

try:

    try:

        # 假設(shè)這里是一些代碼

        1 / 0

    except ZeroDivisionError as e:

        # 引發(fā)一個(gè)新的異常,同時(shí)保留原始異常的信息

        raise MyCustomError("更嚴(yán)重的問(wèn)題") from e

except MyCustomError as e:

    print(f"捕獲到自定義異常:{e}")

    # 訪問(wèn)原始異常信息

    print(f"原始異常類型:{type(e.__cause__)}")

在這個(gè)例子中,如果MyCustomError被捕獲,你仍然可以通過(guò)e.__cause__屬性訪問(wèn)原始的ZeroDivisionError異常。


2.3 異常是如何傳播的?

異常傳播是異常處理中的一個(gè)關(guān)鍵概念,它描述了當(dāng)一個(gè)異常在當(dāng)前作用域內(nèi)未被捕獲時(shí),如何將異常傳遞到調(diào)用棧的上一層。在Python中,如果一個(gè)異常在try塊中被拋出,并且沒(méi)有在相應(yīng)的except塊中被捕獲,那么這個(gè)異常將沿著調(diào)用棧向上傳播,直到被捕獲或者程序終止。


異常傳播的步驟:


1.異常拋出:在try塊中的代碼執(zhí)行過(guò)程中,如果發(fā)生了異常,Python解釋器會(huì)立即停止執(zhí)行try塊中余下的代碼,并開(kāi)始搜索異常處理器。

2.搜索異常處理器:Python解釋器首先查看當(dāng)前try塊的except子句,檢查是否有匹配的異常類型處理器。

3.向上傳播:如果當(dāng)前try塊中沒(méi)有找到匹配的except子句,Python解釋器將異常沿著調(diào)用棧向上傳播到最近的調(diào)用者。

4.調(diào)用者處理:如果異常傳播到了一個(gè)調(diào)用者的try塊,并且該調(diào)用者有一個(gè)匹配的except子句,那么異常將在此被捕獲并處理。

5.未被捕獲的異常:如果異常傳播到了程序的最頂層,且沒(méi)有任何except子句捕獲它,那么程序?qū)⒔K止,并且通常會(huì)打印出錯(cuò)誤信息和堆棧跟蹤。


示例


def function_a():

    try:

        # 可能會(huì)拋出異常的代碼

        raise ValueError("這是一個(gè)錯(cuò)誤")

    except ValueError as e:

        # 捕獲并處理異常

        print("在function_a中捕獲異常:", e)

        raise  # 可以選擇重新拋出異常


def function_b():

    try:

        function_a()  # 調(diào)用可能會(huì)拋出異常的函數(shù)

    except ValueError as e:

        # 捕獲并處理異常

        print("在function_b中捕獲異常:", e)


function_b()

在這個(gè)例子中,function_a拋出了一個(gè)ValueError異常。由于function_a內(nèi)部的except子句捕獲了這個(gè)異常,可以選擇處理它并重新拋出。當(dāng)function_a重新拋出異常時(shí),異常傳播到了它的調(diào)用者function_b,在那里被捕獲并處理。


本文網(wǎng)址:
下一篇:沒(méi)有資料

相關(guān)信息:
版權(quán)所有 CopyRight 2006-2017 江蘇和訊自動(dòng)化設(shè)備有限公司 常州自動(dòng)化培訓(xùn)中心 電話:0519-85602926 地址:常州市新北區(qū)府琛商務(wù)廣場(chǎng)2號(hào)樓1409室
蘇ICP備14016686號(hào)-2 技術(shù)支持:常州山水網(wǎng)絡(luò)
本站關(guān)鍵詞:常州PLC培訓(xùn) 常州PLC編程培訓(xùn) 常州PLC編程 常州PLC培訓(xùn)班 網(wǎng)站地圖 網(wǎng)站標(biāo)簽
在線與我們?nèi)〉寐?lián)系
色婷婷AV无码久久精品,久久天天躁狠狠躁夜夜97,羞羞麻豆国产精品1区2区3区,啪影院免费线观看视频,思思久久er99精品亚洲