Python 如何使用Pytest测试错误消息
我想找到一种方法,用pytest测试我的代码是否为给定错误返回正确的错误消息 我的代码在字典上工作,在某些情况下,某些键可能是未定义的。在下面的示例中,Python 如何使用Pytest测试错误消息,python,pytest,Python,Pytest,我想找到一种方法,用pytest测试我的代码是否为给定错误返回正确的错误消息 我的代码在字典上工作,在某些情况下,某些键可能是未定义的。在下面的示例中,标记变量由用户提供,在某些情况下,该键可能未定义。然后,我添加了一个try/except语句来捕获这个异常,并向用户返回一条错误消息,解释这个问题 试试看: 种类=自我。种类[标签] 除KeyError外: 打印(f“错误:未定义物种{tag}”) 我的问题出现在尝试为此代码编写单元测试时。如何检查代码是否返回了相应的错误消息?我可以编写一个愿
标记
变量由用户提供,在某些情况下,该键可能未定义。然后,我添加了一个try/except语句来捕获这个异常,并向用户返回一条错误消息,解释这个问题
试试看:
种类=自我。种类[标签]
除KeyError外:
打印(f“错误:未定义物种{tag}”)
我的问题出现在尝试为此代码编写单元测试时。如何检查代码是否返回了相应的错误消息?我可以编写一个愿意提供错误的标记的测试,然后检查stdout,但是如果我决定更改错误消息,我必须重写这个测试。这在“不要重复你自己”的方法中似乎不太合适
这:没有回答我的问题,因为我没有提出例外
也许我一开始就没有正确地处理错误,有一种更好的方法可以使用Python来处理错误。我认为您应该更改代码结构以实现自己的愿望
class Species:
def myMethod(tag):
try:
species = self.species[tag]
except KeyError:
raise YourCustomError(f"Error: the species {tag} is not defined")
然后,您可以编写pytest函数来检查在使用带有错误标记的myMethod时是否引发了CustomError。请注意,您可以不使用CustomError,而是执行以下操作:raise KeyError(“自定义消息”)
在此处正确回答此问题。如果代码捕获异常并返回错误消息,则此问题的可能重复项将不起作用。我想检查代码是否返回正确的错误消息。是的,我正在考虑使用我自己的异常。也许这是处理此问题的更好方法。我尝试了您建议的raise KeyError(“自定义消息”)
,但我得到了一个非常难看的堆栈跟踪,第一个KeyError,然后在处理上述异常时,一条消息说,发生了另一个异常
,然后对我的自定义消息的第二个KeyError进行了另一次跟踪是的,堆栈跟踪不是很漂亮,但毕竟非常精确。我不知道这是否可以改变。。