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

Python报错Global name not defined:类内方法调用问题求助

问题解决:Global name not defined 报错

错误原因分析

你的代码存在两个核心问题,均属于Python类方法的基础规范问题:

  • 类实例方法缺少self参数:mergesort作为Solution类的实例方法,必须将self作为第一个参数传入,否则Python无法识别它是类的成员方法。
  • 类内部方法调用未通过self:不管是sortColors中调用mergesort,还是mergesort自身的递归调用,都必须使用self.mergesort()的形式,否则Python会把mergesort当作全局函数处理,找不到时就会抛出"Global name not defined"错误。

VSCode能正常运行,大概率是你直接执行了代码内的部分逻辑,没有遵循LeetCode的调用流程(LeetCode会先创建Solution实例,再调用sortColors方法),因此没暴露这个问题。

修正后的代码

class Solution(object):
    def mergesort(self, arr):  # 增加self参数
        if len(arr) > 1:
            r = len(arr) // 2
            arr1, arr2 = arr[:r], arr[r:]
            self.mergesort(arr1)  # 递归调用添加self
            self.mergesort(arr2)
            i = j = k = 0
            while i < len(arr1) and j < len(arr2):
                if arr1[i] > arr2[j]:
                    arr[k] = arr2[j]
                    j += 1
                else:
                    arr[k] = arr1[i]
                    i += 1
                k += 1
            while i < len(arr1):
                arr[k] = arr1[i]
                k += 1
                i += 1
            while j < len(arr2):
                arr[k] = arr2[j]
                k += 1
                j += 1

    def sortColors(self, nums):
        self.mergesort(nums)  # 调用类内方法添加self

内容的提问来源于stack exchange,提问作者Ankit Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:52:13