ValueError:负数不能提升到分数幂

时间:2013-07-19 13:18:32

标签: python

当我在终端

尝试此操作时
>>> (-3.66/26.32)**0.2

我收到以下错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: negative number cannot be raised to a fractional power

但是,我可以通过两个步骤完成此操作,例如

>>> (-3.66/26.32)
-0.13905775075987842
>>> -0.13905775075987842 ** 0.2
-0.6739676327771593

为什么会这样?单行解决这个问题的方法是什么?

2 个答案:

答案 0 :(得分:18)

提升能力优先于一元减号。

所以你有-(0.13905775075987842 ** 0.2)而不是(-0.13905775075987842) ** 0.2,如你所愿:

>>> -0.13905775075987842 ** 0.2
-0.6739676327771593
>>> (-0.13905775075987842) ** 0.2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: negative number cannot be raised to a fractional power

如果您希望它起作用,您应该写(-3.66/26.32 + 0j)**0.2

>>> (-3.66/26.32 + 0j)**0.2
(0.5452512685753758+0.39614823506888347j)

或者按照@TimPietzcker的说法切换Python 3。

答案 1 :(得分:7)

切换到Python 3,它会自动将结果提升为复数:

>>> (-3.66/26.32)**0.2
(0.5452512685753758+0.39614823506888347j)