Python AssertionError:未引发ValueError

Python AssertionError:未引发ValueError,python,python-3.x,python-unittest,Python,Python 3.x,Python Unittest,init类异常不会引发由assetRaises()标识的异常 当我为类单独创建一个实例时,定义的异常被正确地打印出来 import unittest class Circle: def __init__(self, radius): # Define the initialization method below self.radius = radius try : if radius < 0 or radiu

init类异常不会引发由assetRaises()标识的异常

当我为类单独创建一个实例时,定义的异常被正确地打印出来

import unittest

class Circle:
    def __init__(self, radius):
        # Define the initialization method below
        self.radius = radius
        try :
          if  radius < 0 or radius > 1000 : raise ValueError
        except ValueError :
          print("radius must be between 0 and 1000 inclusive")

class TestCircleCreation(unittest.TestCase):
    def test_creating_circle_with_negative_radius(self):
        # Try Defining a circle 'c' with radius -2.5 and see 
        # if it raises a ValueError with the message
        # "radius must be between 0 and 1000 inclusive"
        with self.assertRaises(ValueError) as e:
            c = Circle(-2.5)
        self.assertEqual(str(e.exception),"radius must be between 0 and 1000 inclusive")

assertRaises
仅测试上下文管理器中是否引发异常。您捕获异常,并且不重新访问它,因此unittest永远不会看到它

提出一个异常然后立即捕获它也没有什么意义。 相反,你应该:

class Circle:

    def __init__(self, radius):
        # Define the initialization method below
        self.radius = radius
        if radius < 0 or radius > 1000:
            raise ValueError("radius must be between 0 and 1000 inclusive")
类圆:
定义初始(自身,半径):
#在下面定义初始化方法
自半径=半径
如果半径<0或半径>1000:
raise VALUE ERROR(“半径必须介于0和1000之间,包括0和1000之间”)

您正在捕获
\uuuu init\uuuu
中的异常。您的测试断言异常是从
\uuuu init\uuuu
抛出的,而不是在它内部捕获的。像这样:

def __init__(self, radius):
    if radius < 0 or radius > 1000:
        raise ValueError("radius must be between 0 and 1000 inclusive")
    self.radius = radius
def\uuuu初始(自,半径):
如果半径<0或半径>1000:
raise VALUE ERROR(“半径必须介于0和1000之间,包括0和1000之间”)
自半径=半径

您正在捕获
\uuuuu init\uuuu
中的异常。您的测试断言异常是从
\uuuu init\uuuu
抛出的,而不是在它内部捕获的。那么如何在init外部抛出异常呢?
def __init__(self, radius):
    if radius < 0 or radius > 1000:
        raise ValueError("radius must be between 0 and 1000 inclusive")
    self.radius = radius