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

如何使用getattr将字符串作为属性调用?解决TypeError报错

解决代码中的TypeError并简化循环逻辑

咱们先来看你碰到的问题:TypeError: 'str' object is not callable,这个错误的根源在get_stat函数里的stat()这一行——你把字符串类型的stat(比如'max'、'min')当成可调用的函数来执行了,自然会触发报错。

错误原因拆解

原代码里的return getattr(df['close'], stat()),getattr的第二个参数只需要传入属性名的字符串就行,不需要给字符串加括号调用(只有函数才能这么做),这就是问题的核心。

修正后的完整代码

我们先把错误的地方改掉,同时优化循环的打印逻辑,让输出更直观:

import pandas as pd

def test_run():
    # 遍历每个目标文件
    for symbol in ['nugt', 'soxs']:
        print(f"\n--- {symbol} 的close列统计 ---")
        # 遍历需要计算的统计量
        for stat in ['max', 'min', 'mean']:
            result = get_stat(symbol, stat)
            print(f"{stat.title()} Close: {result:.2f}")

def get_stat(symbol, stat):
    df = pd.read_csv(f"{symbol}.csv")
    # 直接传入stat字符串,不需要加括号调用
    return getattr(df['close'], stat)()

if __name__ == "__main__":
    test_run()

进一步简化代码的方案

如果想让代码更紧凑,其实可以去掉单独的get_stat函数,直接在循环里完成逻辑,同样能保持代码的简洁性:

import pandas as pd

def test_run():
    stats = ['max', 'min', 'mean']
    for symbol in ['nugt', 'soxs']:
        df = pd.read_csv(f"{symbol}.csv")
        print(f"\n--- {symbol} close列统计结果 ---")
        for stat in stats:
            value = getattr(df['close'], stat)()
            print(f"{stat.title()}: {value:.2f}")

if __name__ == "__main__":
    test_run()

这样既解决了报错问题,又实现了你用循环简化代码的需求,输出结果也更易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:20:56