处理异常-python中的负平方根



我正试图写一段代码来处理负平方根的异常,因为我只想要一个正的结果。我的代码是:

def sqRoot(x):
    try: 
        result = (x)**0.5
    except ValueError:
        result = "This is a negative root"
    except TypeError:
        result = "Please enter a number"
    return result

出于某种原因,当我使用调用运行此代码时

x = sqRoot(-200)

我没有得到错误,但python给了我一个复数的结果。我似乎看不到代码中的错误。

将讨论从评论中转移。。。

在Python 3.0中,幂运算符的行为发生了变化。在早期版本的python中,将负数提高到小数次方会引发ValueError异常,但在python 3中会产生复杂的结果。

找到平方根的另一种方法是python的math.sqrt函数。在Python 3中,当与负数一起使用时,会引发ValueError异常:

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.sqrt(-200)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error

如果python 3返回一个复数,而这不是您想要的,那么您总是可以使用If语句来实现所需的输出:

def sqRoot(x):
    if not isinstance(x, (int, long, float)):
        return "Please enter a number"
    if x < 0:
        return "This is a negative root"
    return (x)**0.5

由于在python 3中,负数的平方根是定义的(作为复数),因此您必须自己测试:

def sqRoot(x):
    if not type(x) in [int, long, float]:
        result = "Please enter a number"
    elif x < 0:
        result = "This is a negative root"
    else:
        result = (x)**0.5
    return result

顺便说一句,我不认为函数在一种情况下返回数字,在另一种情况中返回字符串是好的编程实践。我认为最好是提出错误。

最新更新