2

我有一个关于同情的小问题。我确实加载了库:

from sympy import *

在我的程序的某个时刻,我想评估一个函数。

x=Symbol('x', real=True)
sqrt(1-x).subs(x, 9).evalf()
>>> 2.82842712474619*I

Sympy 回答我的值很复杂,但我想要一个错误,就像基本的 python 一样:

sqrt(-1)
>>> ValueError: math domain error

有人知道如何使用 sympy 做到这一点吗?

4

1 回答 1

3

我可能是错的,但我认为你不能让它这样大喊大叫,因为那是一个科学图书馆,所以它是为支持虚数而设计的,但你可以稍微改变一下:

x=Symbol('x', real=True)
v = sqrt(1-x).subs(x, 9).evalf()

if not v.is_real:
    raise ValueError, "math domain error"

或者您可以创建一个函数:

def assert_real(v):
    if not v.is_real:
        raise ValueError, "math domain error"
    return v

所以你可以这样做:

x = Symbol('x', real=True)
v = assert_real(sqrt(1-x).subs(x, 9).evalf())
于 2013-06-13T14:58:21.403 回答