---
title: 'Solidity WTF 102 30 單元'
lang: zh-tw
---
Solidity WTF 102 30 單元
===
:::info
:date: 2024/10/09
:::
[TOC]
# 課程學習
## Try Catch
### 簡介
與其他語言的Try Catch比較不一樣,其他語言是try裡面的是否有噴錯,而決定是否要catch。而Solidity中的Try Catch則是先進行Try的external函數是否有錯誤,才會進行try包著的邏輯。
### 使用方式
```javascript!
try externalContract.f() {
// call成功externalContract下 運行這裡的程式
} catch {
// call失败externalContract的情况下 運行這裡
}
// 也可以加上return聲明
try externalContract.f() returns(returnType val){
} catch {
}
// catch支持捕獲特殊異常原因
try externalContract.f() return(returnType){
} catch Error(string memory reason) {
// 捕獲revert和require例外
} catch Panic(uint errorcode){
// 捕獲Panic例外,例如assert失敗 溢出 除零 等...
} catch (bytes memory) {
// 如果發生了revert且上面2個異常類型匹配都失敗 會進入
// 例如revert() require(false) revert自定義類型的error
}
// 也可以用來處理創建合約的異常 只需把externalContract 變成 new ContractName.functionName 即可
```
### 重點
:::success
如果學習過其他語言都知道try-catch的用法,但Solidity中的真的很不一樣,需在注意。
:::