【问题标题】:Does this Python error 'ValueError: negative number cannot be raised to a fractional power' have an error?这个 Python 错误“ValueError:不能将负数提高到分数幂”是否有错误?
【发布时间】:2014-10-18 07:51:31
【问题描述】:

我对以下代码有疑问:

- k_cav*((Tcav*b**3*Pr/((T3+T2)*v**2))**4.42)**0.091/b

它会抛出标题中显示的错误,但我确保分数幂 (0.091) 的底对于所有可能的值都是正数。 Tcav = abs(T3-T2), b = 0.01, Pr = 0.72, v = 1.34*10**(-5),T3 和 T2 是 285 左右的开尔文温度。

需要说明的是,该计算是大型计算的一部分,需要多次重复,通过牛顿-拉夫森数值求根方法确定多个温度,并且只有在多次迭代后才会出现错误。

任何机构都可以帮助我解决这个问题。我不知道该怎么办。

【问题讨论】:

  • 您是否尝试过将计算分解为多个步骤,以便您可以准确地看到失败的位置?
  • 其实这部分是一个子部分,但我可以尝试进一步分解。
  • 好的。如果我将公式分成两行,-k_cav*((Tcav*b**3*Pr/((T3+T2)*v**2))**4.42)**0.091/b,错误实际上出现在-k_cav 的行中。
  • 报错时能否打印出变量的值?
  • 这并没有把它分解,只是把它放在多行上。

标签: python runtime-error


【解决方案1】:

我建议使用try/except 来捕获错误并然后打印出变量的值。这样你就可以确定罪魁祸首了:

try:
    computedValue = - k_cav*((Tcav*b**3*Pr/((T3+T2)*v**2))**4.42)**0.091/b
except ValueError:
    print k_cav, Tcav, b, Pr, T3, T2, v
    raise
doWhateverYouDoWith(computedValue)

【讨论】:

  • 我不知道这个“尝试和排除”的东西(我对 Python 和一般的编码都很陌生)但它可以帮助我找到错误所在,我现在用类似于你的代码片段来处理它。
【解决方案2】:

Python 2 考虑否定的优先级(在 Python 3 中已解决)。 检查this,类似的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 2021-09-09
    • 2015-11-17
    • 1970-01-01
    相关资源
    最近更新 更多