异常处理
Aria 提供 try / catch / finally 结构来处理运行时异常,以及 throw 语句来主动抛出异常。
try / catch / finally
基本语法:
try {
var.result = riskyOperation()
} catch (e) {
print('Error: ' + e)
} finally {
cleanup()
}
三个块的组合规则:
try块是必需的catch块是可选的finally块是可选的catch和finally至少需要一个
catch 变量
catch 后的变量名用括号包裹,用于接收异常信息:
try {
throw 'something went wrong'
} catch (e) {
print(e) // something went wrong
}
也可以省略括号和变量名,不捕获异常信息:
try {
throw 'error'
} catch {
print('An error occurred')
}
throw 语句
使用 throw 抛出异常。可以抛出任意值:
throw 'something went wrong'
throw 'Invalid argument: ' + arg
抛出的值会被 catch 块中的变量接收。
仅 try-finally
当不需要捕获异常,但需要确保清理逻辑执行时,可以省略 catch:
try {
var.file = openFile('data.txt')
processFile(file)
} finally {
closeFile(file)
}
嵌套异常处理
try / catch / finally 可以嵌套使用:
try {
try {
throw 'inner error'
} catch (e) {
print('Inner catch: ' + e)
throw 'rethrown: ' + e
}
} catch (e) {
print('Outer catch: ' + e)
}
// Inner catch: inner error
// Outer catch: rethrown: inner error
最佳实践
将可能出错的代码放在 try 块中,保持 try 块尽量小:
var.data = none
try {
data = parseInput(rawInput)
} catch (e) {
print('Parse failed: ' + e)
data = defaultValue
}
使用 finally 确保资源清理:
var.connection = none
try {
connection = connect(host, port)
connection.send(data)
} catch (e) {
print('Connection error: ' + e)
} finally {
if (connection != none) {
connection.close()
}
}
在需要时重新抛出异常,添加上下文信息:
try {
processData(input)
} catch (e) {
throw 'Failed to process data: ' + e
}