如何阻止python从计算(-2)^ 0.5变成一个复数,并给我一个例外而不是

时间:2016-04-14 16:33:09

标签: python python-3.4

我正在我的大学学习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))

3 个答案:

答案 0 :(得分:3)

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

第二种方法,使用math.pow代替内置运算符。

答案 1 :(得分:1)

Python无法配置为更改此类基本行为,但您可以随时提出自己的异常。

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

答案 2 :(得分:1)

如果产品为负数,您可以明确地引发异常,例如:

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

这是raising exceptions的教程。