2015-03-31 6 views
7

Próbuję oznaczyć funkcję jako przestarzałą, aby skrypt wywołujący ją działał do normalnego zakończenia, ale został przechwycony przez inspekcje kodu statycznego PyCharm. (Są też inne pytania dotyczące tego zaniechania ostrzeżeń, ale myślę, że poprzedzają Python 2.6, kiedy wierzę wyjątki klasy oparte zostały wprowadzone.)Jak podnieść DeprecationWarnings w Pythonie 2.7?

Oto co mam:

class Deprecated(DeprecationWarning): 
    pass 

def save_plot_and_insert(filename, worksheet, row, col): 
    """ 
    Deprecated. Docstring ...<snip> 
    """ 

    raise Deprecated() 

    # Active lines of 
    # the function here 
    # ... 

moim rozumieniu jest to, że Przestarzałe ostrzeżenia powinny zezwalać na uruchomienie kodu, ale ta próbka kodu faktycznie zatrzymuje się po wywołaniu funkcji. Kiedy usunę "podniesienie" z treści funkcji, kod zostanie uruchomiony, ale PyCharm nie oznaczy wywołania funkcji jako przestarzałe.

Jaki jest Pythoniczny (2.7.x) sposób oznaczania funkcji jako przestarzałe?

+0

Użyj dekorator? –

Odpowiedz

14

Nie powinieneś/powinnaś przyjmować raise DeprecationWarning (lub podklasy), ponieważ wtedy nadal zgłaszasz faktyczny wyjątek.

Zamiast używać warnings.warn:

import warnings 
warnings.warn("deprecated", DeprecationWarning) 

https://docs.python.org/2/library/warnings.html#warnings.warn

+0

Dzięki! Właśnie tego szukałem. Skrypt działa teraz, ale PyCharm wykreśla wywołanie funkcji. Zostałem wprowadzony w błąd przez ostrzeżenia dziedziczące z wyjątków: https://docs.python.org/2/library/exceptions.html#exception-hierarchy – Beachcomber

+0

@Beachcomber: PyCharm wyłączył wywołanie funkcji, ponieważ oznaczono ją jako przestarzałą. Funkcja nadal działa, ale jest widocznie oznaczona, więc wiesz, aby zmienić kod, aby go nie używać. –