Mojo函数调用报错:无法在不可抛出上下文调用可抛函数,如何解决?
问题解决:正确调用Mojo的pair_test()函数
你遇到的两个核心问题:
- Mojo 0.2.1暂不支持在文件作用域直接执行表达式(也就是不能把
pair_test()直接写在文件末尾) def定义的函数默认标记为raises(可能抛出异常),调用时需要放在支持异常处理的上下文中
以下是两种可行的解决方式:
方法1:将pair_test改为fn,通过入口函数调用
fn定义的函数默认不会抛出异常,无需额外异常处理,同时把调用逻辑放到程序入口函数中:
struct MyPair: var first: Int var second: Int fn __init__(inout self, first: Int, second: Int): self.first = first self.second = second fn __lt__(self, rhs: MyPair) -> Bool: return self.first < rhs.first or (self.first == rhs.first and self.second < rhs.second) fn pair_test() -> Bool: let p = MyPair(1, 2) # return p < 4 # 取消注释会触发类型不匹配错误 return True @main fn main(): let result = pair_test() print(result)
方法2:保留def,用try块包裹调用
如果需要保留def定义(比如函数内有潜在的异常逻辑),则必须用try块处理异常,同时将调用放到入口函数里:
struct MyPair: var first: Int var second: Int fn __init__(inout self, first: Int, second: Int): self.first = first self.second = second fn __lt__(self, rhs: MyPair) -> Bool: return self.first < rhs.first or (self.first == rhs.first and self.second < rhs.second) def pair_test() -> Bool: let p = MyPair(1, 2) # return p < 4 # 取消注释会触发类型不匹配错误 return True @main fn main(): try: let result = pair_test() print(result) except: print("函数调用出现异常")
关键说明
@main装饰的函数是Mojo程序的入口,文件顶层仅允许放置结构体、函数等定义,不能直接执行表达式def函数默认带有raises属性,必须在try块中调用,或者在另一个标记为raises的函数内调用fn函数默认是noexcept(不会抛出异常),调用时无需额外异常处理
内容的提问来源于stack exchange,提问作者raman shariati
相关产品推荐
相关产品推荐

