Python 收集期间的Pytest错误会中断程序运行
构建一个程序,创建一个(字符串)电话号码对象,并以多种方式对其进行操作 测试套件调用了许多值错误。要实现这些目标并使程序通过这些测试是非常困难的 例如,对下面number1.number的调用返回:Python 收集期间的Pytest错误会中断程序运行,python,python-3.x,pytest,Python,Python 3.x,Pytest,构建一个程序,创建一个(字符串)电话号码对象,并以多种方式对其进行操作 测试套件调用了许多值错误。要实现这些目标并使程序通过这些测试是非常困难的 例如,对下面number1.number的调用返回: Interrupted: 1 errors during collection 然后程序停止,不调用号码2 我的问题是:如何编写下面的代码,以便在抛出第一个异常后继续运行 class Phone (object): def __init__(self, phone_number):
Interrupted: 1 errors during collection
然后程序停止,不调用号码2
我的问题是:如何编写下面的代码,以便在抛出第一个异常后继续运行
class Phone (object):
def __init__(self, phone_number):
punctuation = ['\'', '+', '(', ')', '-', '.',',',' ']
self.clean_number = [item for item in phone_number if item not in punctuation]
self.output = ''.join(self.clean_number)
if self.clean_number[0] == '1' and len(self.clean_number) > 10:
self.clean_number = self.clean_number[1:]
self.verify()
@property
def number(self):
if len(self.output) > 10:
return self.output[1:]
else:
return self.output
@property
def area_code(self):
return self.output[:3]
def pretty(self):
pretty_number = [char for char in self.clean_number]
pretty_number.insert(0, '(')
pretty_number.insert(4, ')')
pretty_number.insert(5, ' ')
pretty_number.insert(9, '-')
return ''.join(pretty_number)
def verify(self):
if 'a' in self.clean_number:
raise ValueError("Letter in number.")
number1 = Phone("123-abc-7890")
print(number1.number)
number2 = Phone("(213) 555-3456")
print(number2.number)
下面是测试,fwiw:
def test_invalid_with_letters(self):
with self.assertRaisesWithMessage(ValueError):
Phone("123-abc-7890")
那么,为什么不纠正错误呢?测试收集期间的中断表明,您的模块在导入时出错,因此无法使用。这是一个值错误,用于满足测试套件中的单元测试。如果程序没有成功抛出错误,它就不能通过测试。问题是,当它读取这个值错误时,它在测试收集期间给出了一个错误,并关闭了所有内容。所以看起来语法可能有问题。那么,为什么在模块导入时引发值错误呢?您的模块在当前状态下不可用。如果您想测试
手机(“123-abc-7890”)
,请将其从模块代码中删除并放入测试代码中-这是您在测试中已完成的操作,其中包含字母。number1
和number2
有什么用途?这是exercism.io的练习,它在测试套件中,如果不能做到这一点,练习将无法通过。你的意思是?不需要,它不需要在模块级设置类似于number1=Phone(“123-abc-7890”)
的功能。要通过测试,唯一需要的是正确实现Phone
类。删除类以外的所有内容以运行测试套件。那么,为什么不修复错误呢?测试收集期间的中断表明,您的模块在导入时出错,因此无法使用。这是一个值错误,用于满足测试套件中的单元测试。如果程序没有成功抛出错误,它就不能通过测试。问题是,当它读取这个值错误时,它在测试收集期间给出了一个错误,并关闭了所有内容。所以看起来语法可能有问题。那么,为什么在模块导入时引发值错误呢?您的模块在当前状态下不可用。如果您想测试手机(“123-abc-7890”)
,请将其从模块代码中删除并放入测试代码中-这是您在测试中已完成的操作,其中包含字母。number1
和number2
有什么用途?这是exercism.io的练习,它在测试套件中,如果不能做到这一点,练习将无法通过。你的意思是?不需要,它不需要在模块级设置类似于number1=Phone(“123-abc-7890”)
的功能。要通过测试,唯一需要的是正确实现Phone
类。删除类以外的所有内容以运行测试套件。