Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Pytest测试错误消息_Python_Pytest - Fatal编程技术网

Python 如何使用Pytest测试错误消息

Python 如何使用Pytest测试错误消息,python,pytest,Python,Pytest,我想找到一种方法,用pytest测试我的代码是否为给定错误返回正确的错误消息 我的代码在字典上工作,在某些情况下,某些键可能是未定义的。在下面的示例中,标记变量由用户提供,在某些情况下,该键可能未定义。然后,我添加了一个try/except语句来捕获这个异常,并向用户返回一条错误消息,解释这个问题 试试看: 种类=自我。种类[标签] 除KeyError外: 打印(f“错误:未定义物种{tag}”) 我的问题出现在尝试为此代码编写单元测试时。如何检查代码是否返回了相应的错误消息?我可以编写一个愿

我想找到一种方法,用pytest测试我的代码是否为给定错误返回正确的错误消息

我的代码在字典上工作,在某些情况下,某些键可能是未定义的。在下面的示例中,
标记
变量由用户提供,在某些情况下,该键可能未定义。然后,我添加了一个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进行了另一次跟踪是的,堆栈跟踪不是很漂亮,但毕竟非常精确。我不知道这是否可以改变。。