我正在尝试对iPython笔记本中定义或导入的函数使用以下装饰器:
import warnings
def deprecated(func):
'''This is a decorator which can be used to mark functions
as deprecated. It will result in a warning being emitted
when the function is used.'''
def new_func(*args, **kwargs):
warnings.warn("Call to deprecated function {}.".format(func.__name__),
category=DeprecationWarning)
return func(*args, **kwargs)
new_func.__name__ = func.__name__
new_func.__doc__ = func.__doc__
new_func.__dict__.update(func.__dict__)
return new_func
我在utils.py
中定义了装饰器。当我以这种方式使用装饰器时:
import utils #from utils import deprecated
@utils.deprecated
def test():
print 'Brokolice'
然后运行test()
打印' Brokolice',但不会发出任何警告。但是,当我在iPython中定义装饰器时,我得到了所需的弃用警告。
我正在使用Python 2.7并且我对装饰器或Python一般都不太满意,但在这种情况下,我不知道出了什么问题,因为如果装饰器的导入失败,我会发现某种错误。
答案 0 :(得分:2)
尝试在warnings.filterwarnings('always')
import warnings
In [1]: import test
In [2]: test.test()
warning
utils.py:12: DeprecationWarning: Call to deprecated function test.
category=DeprecationWarning)
Brokolice
答案 1 :(得分:1)
python -Wd test.py # -Wdefault
这将打印DeprecationWarning警告,默认情况下由python2.7隐藏。有关详细信息,请参阅here。
对于你的问题“任何想法为什么这行”返回func(* args,** kwargs)“也会被打印出来?”。
这只是为了便于阅读..
长度(线)应该在pep8中<= 80