try-catch 不能处理 solidity 中的错误吗?
Can try-catch not handle an error in solidity?
我有内部函数
function _somefunction() internal {
if (address(attr) != address(0)) {
try attr.maybedoesntexist() {
} catch Error(string memory message) {
emit SomethingFailed();
} catch {
emit SomethingFailed();
}
}
}
当我在 hardhat 中测试它时,我将 attr
设置为非合同,但不知何故,错误 function call to a non-contract account
经历了第一次捕获,整个事情恢复了。
没有其他函数使用attr
,错误完全取决于attr
是否为合约账户。 catch居然不能处理一些错误?
调用 non-contracts 的异常目前 (v0.8) 未被 try/catch
捕获。
您可以验证地址是否为合约,并且只调用合约:
// length of attr's bytecode is 0, it's not a contract
if (address(attr).code.length == 0) {
return;
}
try attr.maybedoesntexist() {
我有内部函数
function _somefunction() internal {
if (address(attr) != address(0)) {
try attr.maybedoesntexist() {
} catch Error(string memory message) {
emit SomethingFailed();
} catch {
emit SomethingFailed();
}
}
}
当我在 hardhat 中测试它时,我将 attr
设置为非合同,但不知何故,错误 function call to a non-contract account
经历了第一次捕获,整个事情恢复了。
没有其他函数使用attr
,错误完全取决于attr
是否为合约账户。 catch居然不能处理一些错误?
调用 non-contracts 的异常目前 (v0.8) 未被 try/catch
捕获。
您可以验证地址是否为合约,并且只调用合约:
// length of attr's bytecode is 0, it's not a contract
if (address(attr).code.length == 0) {
return;
}
try attr.maybedoesntexist() {