如何阻止python将(-2)^0.5计算为复数,并给出一个异常

如何阻止python将(-2)^0.5计算为复数,并给出一个异常,python,python-3.4,Python,Python 3.4,我正在我的大学学习python初学者课程,明天我要准备一个关于异常的测试。 我正试图从列表中算出几何平均数。当我在列表中输入一个负值时,python会计算几何平均值并给出一个复数。 然而,在为我的测试做准备的过程中,当列表中有负值时,我希望引发一个异常,但我不知道如何做到这一点?有人能帮忙吗 我在python3.4工作。如果你想在这里看到我的代码。关于如何提高代码效率的任何其他建议,请告知我。提前谢谢 #LOAD A LIST while Tru

我正在我的大学学习python初学者课程,明天我要准备一个关于异常的测试。 我正试图从列表中算出几何平均数。当我在列表中输入一个负值时,python会计算几何平均值并给出一个复数。 然而,在为我的测试做准备的过程中,当列表中有负值时,我希望引发一个异常,但我不知道如何做到这一点?有人能帮忙吗

我在python3.4工作。如果你想在这里看到我的代码。关于如何提高代码效率的任何其他建议,请告知我。提前谢谢

            #LOAD A LIST 
            while True:
                try:
                    string = input("please enter a list of numbers separated by commas \n:",)
                    L = [float(x) for x in string.split(",")]
                    #print(L)
                    break
                except ValueError:
                    print("There seems to be a value error in that list")
                    pass

            #COMPUTE GEOMETRIC MEAN
            def gm(L):
                cnt = 1
                try:
                    for i in range(len(L)):
                        cnt=cnt*L[i]
                    geo = (cnt)**(1/len(L))
                    return geo
                except ValueError:
                    print("Value error!")
                except TypeError:
                    print("type error!")

            print("geometric mean is, ", gm(L))

Python不能被配置为改变这些基本行为,但您可以随时提出自己的异常

def gm(L):
    if any(x < 0 for x in L):
        raise ValueError("List cannot have negative values")
    ...

Python不能被配置为改变这些基本行为,但您可以随时提出自己的异常

def gm(L):
    if any(x < 0 for x in L):
        raise ValueError("List cannot have negative values")
    ...

如果产品为负数,您可以显式引发异常,例如:

if cnt < 0:
   raise ValueError('Negative product')
geo = (cnt)**(1/len(L))
return geo

以下是有关的教程。

如果产品为负值,您可以显式引发异常,例如:

if cnt < 0:
   raise ValueError('Negative product')
geo = (cnt)**(1/len(L))
return geo

这里有一个关于第一种方法的教程,您自己测试并引发异常


第二种方法,使用math.pow而不是内置运算符。

第一种方法,自己测试并引发异常

第二种方法,使用math.pow而不是内置运算符。

Re:Second-method:math.pow将引发ValueError:math-domain错误异常,这很好,但只使用内置pow函数会更简单,因为它会引发ValueError:负数不能被提升为分数次幂-这可以说是更明确的,因此对大多数人来说可能更容易理解。Re:Second method:math.pow会引发ValueError:math domain error exception,这很好,但是,只使用内置的pow函数会更简单,因为它会引发一个ValueError:负数不能被提升为分数次幂——这可以说是更明确的,因此对大多数人来说可能更容易理解。