【问题标题】:If else statement unsupported operand type(s) for *: 'NoneType' and 'float'If else 语句不支持 *: 'NoneType' 和 'float' 的操作数类型
【发布时间】:2021-09-22 17:10:41
【问题描述】:

我在 Jupiter notebook 中使用 if else 语句来改变参数的值,然后在一系列微分方程中使用这些参数。这是我目前的设置...

def epsilon1(t, V1, E_v1, I_v1, A_v1, R_v1, N1):
if t < 28:
    return 0 
if 29 < t < 84:
    return 0.006 * N1 / (N1 - (V1 + E_v1 + I_v1 + A_v1 + R_v1))
if 85 < t < 105:
    return 0.001 * N1 / (N1 - (V1 + E_v1 + I_v1 + A_v1 + R_v1))
if t > 104:
    return 0 
if V1 + E_v1 + I_v1 + A_v1 + R_v1 > 0.4 * N1:
    return 0

然后我建立我的微分方程如下:

def deriv(y, t, N...
Lambda1 = beta11 * (I_s1 + delta_a * A_s1 + delta_v * delta_a * A_v1 + delta_v * I_v1 + delta_i * I_i1 + delta_a * delta_i * A_i1)/N1 + beta12 * (I_s2 + delta_a * A_s2 + delta_v * delta_a * A_v2 + delta_v * I_v2 + delta_i * I_i2 + delta_a * delta_i * A_i2)/N2 + beta13 * (I_s3 + delta_a * A_s3 + delta_v * delta_a * A_v3 + delta_v * I_v3 + delta_i * I_i3 + delta_a * delta_i * A_i3)/N3 + beta14 * (I_s4 + delta_a * A_s4 + delta_v * delta_a * A_v1 + delta_v * I_v4 + delta_i * I_i4 + delta_a * delta_i * A_i4)/N4
 epsilon_current1 = epsilon1(t, V1, E_v1, I_v1, A_v1, R_v1, N1)
 dS1dt = - Lambda1 * S1 - epsilon_current1 * S1

这适用于我之前的代码,除了参数只有一个条件之外,它是相同的。现在我得到这个错误代码...

--> 217     dS1dt = - Lambda1 * S1 - epsilon_current1 * S1
    218     dS2dt = - Lambda2 * S2 - epsilon_current2 * S2
    219     dS3dt = - Lambda3 * S3 - epsilon_current3 * S3

TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'

epsilon2 和 epsilon3 的设置与 epsilon1 相同,只是值不同。

【问题讨论】:

  • Lambda1 应该是什么?
  • S1Lambda1epsilon_current1None,但您没有提供足够的信息。
  • 如果没有执行任何 if 语句,则 epsilon_current1 将为 None 并给您此错误。如果没有一个 if 语句为真,您可能需要一个基本条件
  • 谢谢!!全部修复:)

标签: python if-statement nonetype unsupportedoperation


【解决方案1】:

您可以在函数的最顶部执行检查,例如:

Lambda1 = 1.0; S1 = 2.0; epsilon_current = None

if any(x is None for x in [Lambda1, S1, epsilon_current]):
    print("There's something fishy about these variables, really.")
    # some cool error handling here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 2014-03-28
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多