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

时间:2015-03-23 04:32:10

标签: python python-3.x

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

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给了我一个复数的结果。我似乎无法在代码中看到错误。

3 个答案:

答案 0 :(得分:5)

从评论中转移讨论......

在Python 3.0中,power operator的行为发生了变化。在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

答案 1 :(得分:1)

如果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

答案 2 :(得分:1)

因为在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

顺便说一句,我不认为在一种情况下使用函数返回数字和在另一种情况下使用字符串是一种很好的编程习惯。我认为通过提出错误可以做得更好。