日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python try catch 能知道是哪一行代码_能导致3.7亿美元损失的异常,到底是怎么回事?...

發(fā)布時(shí)間:2024/9/3 python 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python try catch 能知道是哪一行代码_能导致3.7亿美元损失的异常,到底是怎么回事?... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1996年6月,阿麗亞娜5號火箭進(jìn)行了第一次發(fā)射。火箭發(fā)射后37秒自毀,導(dǎo)致任務(wù)失敗,損失約3.7億美元。故障調(diào)查小組最終發(fā)現(xiàn),是由數(shù)據(jù)轉(zhuǎn)換而導(dǎo)致整數(shù)溢出造成的異常。由此看來,提前預(yù)判出異常并進(jìn)行處理對于系統(tǒng)的正常運(yùn)行是多么重要。

不管是小白還是大神,異常總是程序員無法避免的一個(gè)話題。尤其是剛?cè)腴T編程的程序員,一出現(xiàn)異常就不知道如何應(yīng)對,非常容易慌亂。

那么什么時(shí)候才會出現(xiàn)異常呢?只有在當(dāng)前的環(huán)境下程序無法正常運(yùn)行下去,程序已經(jīng)無法來正確解決問題了,異常才會從當(dāng)前環(huán)境中跳出來。在實(shí)際編程中,異常出現(xiàn)的情形總是不期而至:文件不存在或者格式不對、網(wǎng)絡(luò)連接失敗、內(nèi)存或硬盤滿了等等。

一、異常的體系

首先我們可以明確一點(diǎn),就是異常的處理機(jī)制可以確保我們程序的健壯性,提高系統(tǒng)可用率。雖然我們不是特別喜歡看到它,但是我們不能不承認(rèn)它的地位和作用。接下來,我們先通過一張圖來了解下Java異常的體系結(jié)構(gòu)。

從上面這幅圖可以看出,Java標(biāo)準(zhǔn)庫內(nèi)建了一些通用的異常,Throwable是這些類的頂層父類。Throwable又派生出Error和Exception。

Error及其子類代表非程序異常,不能被程序員通過代碼處理。由于Error一般是系統(tǒng)性的錯(cuò)誤,當(dāng)出現(xiàn)這些異常時(shí),Java虛擬機(jī)(JVM)一般會選擇終止線程,所以程序員不用試圖去捕獲Error引發(fā)的異常狀況。

Exception及其子類代表程序本身可以捕獲并且可以處理的異常。可以被Java異常處理機(jī)制使用,是異常處理的核心。根據(jù)編譯器對異常的檢查情況,又將Exception的子類分為運(yùn)行時(shí)異常(RuntimeException)和編譯期異常(CheckedException)。

運(yùn)行時(shí)異常:在編譯期不會提示和發(fā)現(xiàn)這樣的異常,這樣的異常發(fā)生的原因多半是代碼寫的有問題,比如:使用了空對象而引發(fā)的NullPointerException。對于RuntimeException這樣的異常,我們應(yīng)該修正代碼來進(jìn)行處理。

編譯期異常:都是可以在編譯階段被處理的異常,比如:可能會產(chǎn)生I/O錯(cuò)誤時(shí)的IOException。Java認(rèn)為CheckedException都是可以在編譯階段被處理的異常,所以程序會強(qiáng)制要求預(yù)先處理所有的CheckedException,否則編譯不會通過。

二、異常的處理

編程語言覺得盡量在程序員犯錯(cuò)的時(shí)候“惡心”一下程序員,“逼著”他們?nèi)ヌ幚懋惓!ava異常的處理主要依賴于try、catch、finally、throws、throw這五個(gè)關(guān)鍵字,一般來說我們會使用try…catch…finally語句塊進(jìn)行異常處理,或者在方法簽名中使用throws 聲明,“不負(fù)責(zé)任的”的讓方法調(diào)用者自己去解決。

1.異常“終結(jié)者”try,catch

使用try-catch語句塊可以捕獲異常并進(jìn)行處理,try-catch-finally的常規(guī)語法如下:

try{
//可能會出現(xiàn)異常的程序代碼
語句1;
語句2;
語句3;
}catch(異常類型 e) {
//捕獲并處理異常或者使用throw拋出異常
}finally{
//必執(zhí)行的代碼
}
語句4;
語句5;

當(dāng)try代碼塊中沒有出現(xiàn)異常時(shí):try語句塊中的語句逐一被執(zhí)行,程序?qū)⑻^catch語句塊,執(zhí)行finally語句塊和其后的語句。

當(dāng)try代碼塊中出現(xiàn)異常時(shí):try語句塊中的異常語句之后的代碼將被忽略,程序?qū)⒅苯犹絚atch語句塊。

如果catch語句塊中捕獲到了異常進(jìn)行處理,會在catch語句塊執(zhí)行后接著執(zhí)行finally語句塊和其后的語句。如果沒有捕獲到異常或者使用throw拋出了異常,在catch語句塊執(zhí)行后接著只會執(zhí)行finally語句塊,但finally語句塊后的語句不會被執(zhí)行。

2.“不負(fù)責(zé)任”的throws

throws是另一種處理異常的方式。如果方法內(nèi)沒有捕獲和處理異常,而是通過throw拋出了編譯期異常,那么必須通過throws進(jìn)行聲明。throws運(yùn)用于方法聲明之上,表示當(dāng)前方法不處理異常,而是提醒該方法的調(diào)用者來處理異常。

聲明異常格式如下:

修飾符 返回值類型 方法名(參數(shù))throws異常類名1,異常類名2…{

采取這種異常處理的原因可能是:方法本身不知道如何處理這樣的異常,或者說讓調(diào)用者處理更好,調(diào)用者需要為可能發(fā)生的異常負(fù)責(zé)。

3.自定義異常

在復(fù)雜業(yè)務(wù)環(huán)境下,Java自帶的異常可能滿足不了我們業(yè)務(wù)的需求,這個(gè)時(shí)候我們可以自定義異常來進(jìn)行對業(yè)務(wù)異常的處理。自定義異常都應(yīng)該繼承Exception基類,如果希望自定義運(yùn)行時(shí)異常,則應(yīng)該繼承RuntimeException。

定義自定義異常時(shí)通常需要提供2種構(gòu)造器:一個(gè)是無參數(shù)的構(gòu)造器;另一個(gè)是帶一個(gè)字符串參數(shù)的構(gòu)造器,這個(gè)字符串將作為該異常對象的詳細(xì)說明。語法格式如下:

public class Register Exception extends Runtime Exception {
/*** 空參構(gòu)造 */
public Register Exception() {
} /**** @param message 表示異常提示 */
public Registe rException(String message) {
super(message);
}
}

作為一名合格的程序員,我們不僅需要學(xué)會如何挑選格子襯衫,還需要在瘋狂的coding中鍛煉出更多的肌肉,以便隨時(shí)應(yīng)對前來改需求的產(chǎn)品經(jīng)理,更重要的就是要做到對常見異常有一些印象,在真正遇到時(shí)知道去哪找API并且優(yōu)雅的處理掉異常。

總結(jié)

以上是生活随笔為你收集整理的python try catch 能知道是哪一行代码_能导致3.7亿美元损失的异常,到底是怎么回事?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。