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

Python代码报IndentationError缩进错误与未定义变量问题排查

问题根因

你遇到的IndentationError: unexpected indent报错确实由缩进错误导致,所谓“变量未定义”提示也是该缩进错误引发的连锁反应:

  • 缩进错误位置在min_variance函数段:写完bounds = tuple(bound for asset in range(num_assets))后,下一行的result = sco.minimize(...)没有添加函数层级缩进,被Python判定为函数外部代码,而再下一行的return result又保留了函数内缩进,缩进层级不匹配直接触发语法错误。
  • 变量未定义的原因:num_assets、args、bounds、constraints都是min_variance内部的局部变量,仅在函数作用域内可访问。由于result赋值语句被解析到函数外部,这行代码自然无法访问到上述局部变量,才会弹出未定义提示,并非你没有提前定义这些变量。

相关报错截图:
代码报错截图

修复方法
  1. 调整min_variance函数的缩进,将result赋值行和函数内其他代码保持4空格同级缩进,修复后代码如下:
    def min_variance(mean_returns, cov_matrix):
        num_assets = len(mean_returns)
        args = (mean_returns, cov_matrix)
        constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x) - 1})
        bound = (0.0,1.0)
        bounds = tuple(bound for asset in range(num_assets))
        result = sco.minimize(portfolio_volatility, num_assets*[1./num_assets,], args=args,
                            method='SLSQP', bounds=bounds, constraints=constraints)
        return result
    
  2. 修复潜在的变量缺失问题:random_portfolios函数中使用了len(stocks),但stocks既没有作为参数传入函数,也没有在函数内定义。如果stocks不是全局变量,运行到该行会触发NameError,建议直接替换为len(mean_returns),和其他函数的资产数计算逻辑保持一致,或者将stocks加入random_portfolios的参数列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:06:18