我最近从Python 2迁移到了Python 3,遇到了一个我不认为在Python 2中发生的问题(但我不完全确定。)
以下代码打印出警告(但不会停止运行):
import numpy as np
@np.vectorize
def reciprocal(num):
try:
return 1/num
except ZeroDivisionError:
return 0
reciprocal(0)
#prints: RuntimeWarning: divide by zero encountered in long_scalars
即使我正在处理我的函数中的错误。
如何停止打印/发生此警告?
答案 0 :(得分:2)
虽然在另一个解决方案中提供的suppressWarning
装饰器有效,但它可能有点过于允许,因为它根本不报告警告。我认为,至少有时候,最好通过将警告提升为错误并将其处理为错误来明确警告。使用warnings
模块
import numpy as np
import warnings
warnings.filterwarnings('error')
@np.vectorize
def reciprocal(num):
try:
return 1/num
except ZeroDivisionError:
# Now we end up here.
return 0
reciprocal(0)
答案 1 :(得分:1)
我创建了一个装饰器来抑制函数的警告。它使用与Python文档中的Temporarily Suppressing Warnings相同的策略。
import warnings
def suppressWarnings(func):
def wrapper(*args, **kwargs):
with warnings.catch_warnings():
warnings.simplefilter("ignore")
func(*args, **kwargs)
return wrapper
然后,你可以这样做:
import numpy as np
@suppressWarnings
@np.vectorize
def reciprocal(num):
try:
return 1/num
except ZeroDivisionError:
return 0
reciprocal(0)
并且不会打印出任何警告。