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

调用类方法get_sorted_run_length时出现NameError的问题排查

解决类方法调用的NameError问题

根本原因

在Python类的实例方法中,调用同类的其他实例方法必须通过self前缀,否则解释器会将其视为全局函数,找不到对应名称时就会抛出NameError。结合你的代码,以下是具体错误点和修复方案:


错误1:未使用self调用类方法

在natural_merge_sort方法中,直接调用get_sorted_run_length,没有通过实例对象self访问。
原代码:

get_sorted_run_length(integer_list, 0)

修复后:

self.get_sorted_run_length(integer_list, 0)

错误2:参数顺序颠倒+变量拼写错误

该行代码存在三重问题:没有用self前缀、参数顺序错误、变量名拼写错误(integer_lsit应为integer_list)。
原代码:

index = get_sorted_run_length(self,integer_lsit,index)

修复后:

index = self.get_sorted_run_length(integer_list, index)

错误3:调用merge方法的问题

原代码中merge()同样未使用self前缀,且merge方法需要传入4个参数,需补充参数并通过self调用。
示例修复(需根据你的排序逻辑补充正确参数):

self.merge(integer_list, left_first, left_last, right_last)

额外问题:类内方法缩进错误

原代码中类的方法没有正确缩进,Python会将其视为类外的独立函数,这也是潜在语法错误。所有类内方法需缩进(通常4个空格),示例:

class NaturalMergeSorter:
    def __init__(self):
        return

    def get_sorted_run_length(self, integer_list, start_index):
        # 方法内容...

    def natural_merge_sort(self, integer_list):
        # 修复后的方法内容...

    def merge(self, numbers, left_first, left_last, right_last):
        # 方法内容...

修复后的natural_merge_sort方法示例

def natural_merge_sort(self, integer_list):
    self.get_sorted_run_length(integer_list, 0)
    index = 0
    index = self.get_sorted_run_length(integer_list, index)
    if index == len(integer_list):
        return integer_list
        # 注意:这里的i=0永远不会执行,因为前面已经return,需根据逻辑调整
    else:
        self.get_sorted_run_length(integer_list, index)
        # 补充merge所需的正确参数,例如:
        # self.merge(integer_list, 0, index-1, len(integer_list)-1)
    
    return integer_list # 根据排序逻辑决定是否保留该行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:33:11