Python 试图断言某个异常,但却得到AttributeError?
我真的不明白这个错误指的是什么Python 试图断言某个异常,但却得到AttributeError?,python,unit-testing,exception,assert,Python,Unit Testing,Exception,Assert,我真的不明白这个错误指的是什么 AttributeError("'_AssertRaisesContext' object has no attribute 'exception'",). 我正在尝试编写一个函数power,它接受两个参数a和b,并计算a提升到幂b,然后提升aTypeError,如果输入是int或float,则消息是参数必须是整数或float 这是我的代码: def power(a, b): try : if b == 0: return
AttributeError("'_AssertRaisesContext' object has no attribute 'exception'",).
我正在尝试编写一个函数power,它接受两个参数a和b,并计算a提升到幂b,然后提升aTypeError
,如果输入是int或float,则消息是参数必须是整数或float
这是我的代码:
def power(a, b):
try :
if b == 0:
return 1
elif b == 1:
return a;
else:
return a*pow(a, b-1)
except TypeError :
print ('Argument must be integer or float')
这是我用来测试它的代码:
from unittest import TestCase
class PowerTestCases(TestCase):
def test_returns_correct_power(self):
base, exp = 2, 3
res = power(base, exp)
self.assertEqual(res, 8, msg='Expected {}, got {}'.format(8, res))
def test_return_1_when_exp_is_0(self):
base, exp = 4, 0
res = power(base, exp)
self.assertEqual(res, 1, msg='A number power 0 should be 1')
def test_return_0_when_base_is_0(self):
base, exp = 0, 10
res = power(base, exp)
self.assertEqual(res, 0, msg='O power any number should be 0')
def test_non_digit_argument(self):
with self.assertRaises(TypeError) as context:
base, exp = 'base', 'exp'
res = power(base, exp)
self.assertEqual(
'Argument must be interfer or float',
context.exception.message,
'Only digits are allowed as input'
)
你有两个问题:
首先,您实际上并没有提出异常print()
将数据写入stdout
文件(通常连接到终端或控制台),这不是一回事
使用升起:
raise TypeError('Argument must be integer or float')
接下来,将断言置于错误的缩进级别。with assertRaises()
上下文管理器的要点是捕获with
块中的代码引发的异常。该块中的任何其他代码都不会执行;异常退出了块
您需要在块之后对消息进行断言。这样,assertRaises
也会注意到,如果实际上没有引发异常,那么您会得到一个更有意义的断言错误:
with self.assertRaises(TypeError) as context:
base, exp = 'base', 'exp'
res = power(base, exp)
self.assertEqual(
'Argument must be interfer or float',
context.exception.message,
'Only digits are allowed as input'
)
函数的可能重复不会引发异常。它只是将一些字符串打印到标准输出,如果传递了错误类型,则返回None
。有关详细信息,请参阅副本。