You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:12:40