Raise warning in Python without interrupting program
我正在处理一个问题,如何在不让程序崩溃/停止/中断的情况下在python中发出警告。
我使用下面的简单函数,它只检查用户是否传递给它一个非零的数字。如果用户通过零,程序应警告用户,但正常继续。它应该像下面的代码一样工作,但是应该使用类warning()、error()或exception(),而不是手动打印警告。
1 2 3 4 5 6 | def is_zero(i): if i != 0: print"OK" else: print"WARNING: the input is 0!" return i |
如果我使用下面的代码并将0传递给函数,程序将崩溃,并且永远不会返回值。相反,我希望程序正常继续运行,并通知用户他向函数传递了0。
1 2 3 4 5 6 | def is_zero(i): if i != 0: print"OK" else: raise Warning("the input is 0!") return i |
号
我希望能够测试一个警告已经被抛出,通过UnitTest测试它。如果我只是打印出消息,我就不能用UnitTest中的断言引发来测试它。
1 2 | import warnings warnings.warn("Warning...........Message") |
参见python文档:这里
您不应该使用
默认情况下,与异常不同,警告不会中断。
在
1 2 | >>> warnings.warn('This is my lazy warning.') <string>:1: UserWarning: This is my lazy warning. |
号
只需使用先前存在的类,例如
1 2 | >>> warnings.warn('This is my generic warning.', Warning) <string>:1: Warning: This is my generic warning. |
创建自定义警告类类似于创建自定义异常类:
1 2 3 4 5 6 | >>> class MyCustomWarning(UserWarning): ... pass ... ... warnings.warn('This is my custom warning.', MyCustomWarning) <string>:1: MyCustomWarning: This is my custom warning. |
。
测试时,考虑使用
作为另一种选择,特别是对于独立应用程序,考虑使用