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

Python代码出现AttributeError:'builtin_function_or_method'无split属性求助

Python矩阵类代码报错排查与修复

问题代码

class SquareMatrix:

    def __init__(self, order):
        self.order = order
        self.rows = [
            [0 for j in range(order)]
            for i in range(order)]

    def __str__(self):
        x = ''
        for row in self.rows:
            x = x + ' '.join(map(str, row))+'\n'
        return x

    def set_value(self, i, j, value):
        self.rows[i][j] = value

    def get_value(self, i, j):
        self.rows[i][j]

    def max(self):
        tomliste = []
        for i in self.rows:
            for num in i:
                tomliste.append(num)
        tomliste.sort()
        return tomliste[-1]

    def min(self):
        tomliste = []
        for i in self.rows:
            for num in i:
                tomliste.append(num)
        tomliste.sort()        
        return tomliste[0]

    def trace(self):
        counter = 0
        for i in range(self.order):
            counter = counter + int(self.rows[i][i])
        return counter

    def summary(self):
        lib = {(f'order : {self.order}, max : {self.max()}, min : {self.min()}, trace : {self.trace()}')}
        return lib

    def save(self, filename):
        f = open(filename, "w")
        f.write(str(self))
        f.close()


    @classmethod
    def parse(cls, text):
        liste = []
        for line in text.split('\n'):
            liste.append(line.split())

        matrix = SquareMatrix(len(liste[1]))

        for i, line in enumerate(liste):
            matrix.rows[i] = line
        return matrix

    
    @classmethod
    def load(cls, filename):
        y = open(filename, 'r')
        y = y.read
        y = SquareMatrix.parse(y)
        return y


m1 = SquareMatrix(3)
m1.set_value(1,1,7)
m1.get_value(2, 1)
print("--m1--")
print(m1)
print(m1.summary())


m2_text = """\
1 2 3
4 5 6
7 8 9"""
print("--m2--")
m2 = SquareMatrix.parse(m2_text)
print(m2)
print(m2.summary())
m2.save("m3.txt")


print("--m3--")
m3 = SquareMatrix.load('m1.txt')
print(m3)
print(m3.summary())

报错信息

AttributeError: 'builtin_function_or_method' object has no attribute 'split'

报错堆栈

File "c:\Users\marle\Documents\INFO132\maped6868_hoved2.py", line 96, in 
m3 = SquareMatrix.load('m1.txt')
File "c:\Users\marle\Documents\INFO132\maped6868_hoved2.py", line 72, in load
y = SquareMatrix.parse(y)
File "c:\Users\marle\Documents\INFO132\maped6868_hoved2.py", line 58, in parse
for line in text.split('\n'):
AttributeError: 'builtin_function_or_method' object has no attribute 'split'

预期输出

--m1--
1 0 0
0 1 0
0 0 1
{'order': 3, 'max': 1, 'min': 0, 'trace': 3}
--m2--
1 2 3
4 5 6
7 8 9
{'order': 3, 'max': 9, 'min': 1, 'trace': 15}
--m3--
1 2 3
4 5 6
7 8 9
{'order': 3, 'max': 9, 'min': 1, 'trace': 15}

问题分析与修复

1. 核心报错原因(load方法)

load方法中y = y.read未加括号,赋值的是文件对象的read方法本身,而非调用方法读取的文本内容。传递给parse的是函数对象,自然没有split方法,触发报错。

修复:调用read()方法读取内容,同时用with语句自动管理文件关闭:

@classmethod
def load(cls, filename):
    with open(filename, 'r') as f:
        content = f.read()
    return cls.parse(content)

2. 其他不符合预期的问题修复

  • get_value无返回值:原方法仅访问矩阵元素但未返回,调用后无法获取结果。
    修复:

    def get_value(self, i, j):
        return self.rows[i][j]
    
  • summary返回集合而非字典:原代码用{...}创建集合,与预期的字典输出不符。
    修复:

    def summary(self):
        return {
            'order': self.order,
            'max': self.max(),
            'min': self.min(),
            'trace': self.trace()
        }
    
  • __init__初始化全0矩阵,不符合预期单位矩阵:预期m1是单位矩阵,需将对角线元素设为1。
    修复:

    def __init__(self, order):
        self.order = order
        self.rows = []
        for i in range(order):
            row = [0]*order
            row[i] = 1
            self.rows.append(row)
    
  • parse方法阶数计算错误+未转整数:原代码用len(liste[1])可能因空行报错,且未将字符串元素转为整数。
    修复:

    @classmethod
    def parse(cls, text):
        liste = []
        for line in text.split('\n'):
            stripped_line = line.strip()
            if stripped_line:  # 过滤空行
                liste.append(stripped_line.split())
        if not liste:
            raise ValueError("Invalid matrix text")
        order = len(liste[0])
        matrix = cls(order)
        for i, line in enumerate(liste):
            matrix.rows[i] = [int(num) for num in line]
        return matrix
    
  • load方法文件名错误:原代码加载m1.txt,但之前保存的是m3.txt,需修正文件名。
    修复:

    m3 = SquareMatrix.load('m3.txt')
    

完整修复后代码

class SquareMatrix:

    def __init__(self, order):
        self.order = order
        self.rows = []
        for i in range(order):
            row = [0] * order
            row[i] = 1
            self.rows.append(row)

    def __str__(self):
        x = ''
        for row in self.rows:
            x += ' '.join(map(str, row)) + '\n'
        return x

    def set_value(self, i, j, value):
        self.rows[i][j] = value

    def get_value(self, i, j):
        return self.rows[i][j]

    def max(self):
        tomliste = []
        for row in self.rows:
            tomliste.extend(row)
        return max(tomliste)

    def min(self):
        tomliste = []
        for row in self.rows:
            tomliste.extend(row)
        return min(tomliste)

    def trace(self):
        counter = 0
        for i in range(self.order):
            counter += self.rows[i][i]
        return counter

    def summary(self):
        return {
            'order': self.order,
            'max': self.max(),
            'min': self.min(),
            'trace': self.trace()
        }

    def save(self, filename):
        with open(filename, "w") as f:
            f.write(str(self))

    @classmethod
    def parse(cls, text):
        liste = []
        for line in text.split('\n'):
            stripped_line = line.strip()
            if stripped_line:
                liste.append(stripped_line.split())
        if not liste:
            raise ValueError("Invalid matrix text input")
        order = len(liste[0])
        matrix = cls(order)
        for i, line in enumerate(liste):
            matrix.rows[i] = [int(num) for num in line]
        return matrix

    @classmethod
    def load(cls, filename):
        with open(filename, 'r') as f:
            content = f.read()
        return cls.parse(content)


m1 = SquareMatrix(3)
m1.get_value(2, 1)
print("--m1--")
print(m1)
print(m1.summary())


m2_text = """\
1 2 3
4 5 6
7 8 9"""
print("--m2--")
m2 = SquareMatrix.parse(m2_text)
print(m2)
print(m2.summary())
m2.save("m3.txt")


print("--m3--")
m3 = SquareMatrix.load('m3.txt')
print(m3)
print(m3.summary())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:40:44