第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在 Dart 中,Python 的 try...catch...else 最慣用的替代方法是什么?

在 Dart 中,Python 的 try...catch...else 最慣用的替代方法是什么?

拉風(fēng)的咖菲貓 2021-11-16 16:20:46
來(lái)自 Python,我真的很想念Dartelse中try-except鏈中的子句。else在 Dart 中模擬子句最慣用的是什么?這是一個(gè)受益于else塊的示例。這個(gè):var didFail = false;try {    startDownload()} catch (e) {    didFail = true;    downloadFailed()}   if (!didFail) {    downloadSuccess()}    afterDownload()對(duì)比:try {    startDownload()} catch (e) {    downloadFailed()} else {    downloadSuccess()    }afterDownload()
查看完整描述

2 回答

?
子衿沉夜

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

完全披露:我對(duì) Dart 的全部經(jīng)驗(yàn)是我剛剛花 2 分鐘查看其try語(yǔ)句的語(yǔ)法。這完全基于對(duì) Python 語(yǔ)義的觀察。


else在 Python中做什么?

跳到建議的 Dart 代碼答案的末尾。


以下兩段代碼在 Python 中非常相似:


try:

    ...

    <last code>

except SomeError:

    ...

finally:

    ...


try:

    ...

except SomeError:

    ...

else:

    <last code>

finally:

    ...

<last code>將在兩者相同的情況下執(zhí)行。不同之處在于,由 引發(fā)的任何異常<last statement>都將在第一個(gè)中捕獲,但不會(huì)在第二個(gè)中捕獲。


else在 Python 中模擬

要else在 Python 中模擬的語(yǔ)義,您將使用附加try語(yǔ)句和標(biāo)志來(lái)指示是否應(yīng)重新拋出異常。


else_exception = False

try:

    ...

    try:

        <last code>

    except Exception as e:

        else_exception = True

except SomeError:

    ...

finally:

    if else_exception:

        raise e

    ...

我們檢查嵌套是否try在finally子句中捕獲了異常,因?yàn)樵揺lse子句會(huì)在finally. 如果有異常,現(xiàn)在重新提出它,因?yàn)樗粫?huì)立即被捕獲,就像在else. 然后你可以繼續(xù)剩下的finally。


else在 Dart 中模擬

據(jù)我所知,在 Dart 中也需要相同的邏輯。


bool else_exception = false;

try {

  ...

  try {

     <last code>

  } catch (e) {

    else_exception = true;

  }

} on SomeError catch (e) {

  ...

} finally {

  if (else_exception) {

    throw e;

  }

  ...

}

請(qǐng)注意,如果<last code>拋出異常,上面的代碼將無(wú)法正確保留堆棧跟蹤。要做到這一點(diǎn),需要更多的關(guān)注:


bool else_exception = false;

try {

  ...

  try {

     <last code>

  } catch (e) {

    else_exception = true;

    rethrow;

  }

} on SomeError catch (e) {

  if (else_exception) {

     rethrow;

  }

  ...

}


查看完整回答
反對(duì) 回復(fù) 2021-11-16
?
倚天杖

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

在大多數(shù)情況下,您應(yīng)該能夠else直接在塊的最后寫入塊中的任何內(nèi)容try。在某些情況下,該else塊很有用,并且可以提供更清晰或更富有表現(xiàn)力的代碼,但是您可以編寫比您在“no else”示例中所做的更緊湊的代碼,例如


try {

    start_download() // exception?

    // yay, no exception

    download_success()

} catch (e) { // preferrably "on KindOfException catch (e)"

    download_failed()        

}

afterDownload()

它可能不是作為明確的是download_success只有在沒(méi)有例外執(zhí)行,但暗示很明顯,因?yàn)槿绻霈F(xiàn)了異常,try塊將被中止,執(zhí)行將已經(jīng)進(jìn)入了catch塊。


當(dāng)然,這也意味著在 中引發(fā)的異常download_success()也會(huì)進(jìn)入到catch塊中。這可以通過(guò)使用更具體的異常來(lái)防止,例如on VeryBadDownloadException catch (e),假設(shè)start_download和download_success不會(huì)引發(fā)完全相同類型的異常。


查看完整回答
反對(duì) 回復(fù) 2021-11-16
  • 2 回答
  • 0 關(guān)注
  • 296 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)