ValueError: отрицательное число не может быть увеличено до дробной мощности

Когда я попробовал это в терминале

>>> (-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

Почему такое поведение? Каким образом это можно решить в одной строке?

Ответы

Ответ 1

Приведение в степень имеет приоритет над унарным знаком минус.

Итак, у вас есть -(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)

Или переключите Python 3, как указано @TimPietzcker.

Ответ 2

Переключитесь на Python 3, который автоматически продвигает результат на комплексное число:

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