--- 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中的真的很不一樣,需在注意。 :::