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

如何解决‘cannot initialize variable with None; optionals are explicit’变量初始化错误

如何解决‘cannot initialize variable with None; optionals are explicit’变量初始化错误

嘿,我来帮你搞定这个问题!这个错误提示其实是TakeProfit的Indie Script在跟你说:“别直接用None初始化变量哦,可选类型必须明明白白声明出来~”

为什么会出现这个错误?

Indie Script虽然看起来和Python很像,但它有自己严格的类型规则,不像普通Python那样允许你随便用None当默认值。它要求“可选值”要么用语言专门的空值标识,要么显式告诉编译器这个变量是可选类型。

具体解决方案分两种情况:

  • 情况1:初始化数值类型变量(比如浮点数、整数)
    这时候别用None,直接用nan(Not a Number)来表示“空值”就行,就像你代码里已经导入的from math import nan, isnan那样。
    举个例子:
    错误写法:

    trend_direction = None
    

    正确写法:

    trend_direction = nan
    

    之后要判断这个变量是否为空的时候,用isnan()函数:

    if not isnan(trend_direction):
        # 这里写你要执行的逻辑
    
  • 情况2:初始化非数值类型变量(比如字符串、自定义对象)
    这时候需要显式声明这个变量是“可选类型”,可以用typing模块里的Optional来标注,之后再用None初始化。
    比如:

    from typing import Optional
    signal_label: Optional[str] = None
    

    这样Indie Script就会明白这个变量可以是字符串或者None,不会再报错啦。

结合你的SuperTrend指标代码来改

假设你原来的代码里有类似初始化趋势变量的错误写法,比如:

@indicator('SuperTrend', overlay_main_pane=True)
@param.float('atr_mult', default=1.0, min=0.1, max=10.0, title='ATR Multiplier')
@param.int('n_atr', default=4, min=1, title='ATR Period')
def super_trend(atr_mult, n_atr):
    atr = Atr(n_atr)
    upper_band = nan
    lower_band = nan
    current_trend = None  # 这里会报错!
    # ... 其他逻辑

把current_trend = None改成current_trend = nan,然后后续判断用isnan()就没问题了。

另外如果是MutSeriesF这类系列变量,初始化也不能用None,要对应改成nan:
错误写法:

trend_series = MutSeriesF(None)

正确写法:

trend_series = MutSeriesF(nan)

备注:内容来源于stack exchange,提问作者I am just beginner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:14:30