2015-03-31 25 views
7

Bir işlevi, çağrılan komut dosyasının normal tamamlanmasına kadar çalışmasına izin vermeyecek şekilde işaretlenmeye çalışıyorum, ancak PyCharm'ın statik kod denetimleri tarafından yakalanır. (Orada bu kullanımdan kaldırma uyarıları üzerine diğer bazı sorular vardır, ama ben sınıf tabanlı istisnalar getirilmiştir düşündüğümüz zaman onlar, Python 2.6 önceye düşünüyorum.)Python 2.7'de DeprecationWarnings'i nasıl yükseltirim?

İşte

Ben ne:

class Deprecated(DeprecationWarning): 
    pass 

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

    raise Deprecated() 

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

Benim anlayış olmasıdır Onaylanmamış Uyarılar kodun çalışmasına izin vermelidir, ancak bu kod örneği, işlev çağrıldığında gerçekten durur. Fonksiyonun gövdesinden "kaldır" ı kaldırdığımda kod çalışır, ancak PyCharm işlev çağrısını kullanımdan kaldırılmış olarak işaretlemez.

Pythonic (2.7.x) işaretleme işlevleri, kullanımdan kaldırılmış olarak nedir?

+0

bir dekoratör kullanılsın mı? –

cevap

14

raise DeprecationWarning (veya bir alt sınıf) yapmamalısınız, çünkü o zaman hala gerçek bir istisna oluşturuyorsunuz.

yerine warnings.warn kullanın:

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

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

+0

Teşekkürler! Tam da aradığım şey. Komut şimdi çalışıyor, ancak PyCharm işlev çağrısına çarpıyor. İstisnalar'dan miras alınan Uyarılar tarafından yanıltılmıştım: https://docs.python.org/2/library/exceptions.html#exception-hierarchy – Beachcomber

+0

@Beachcomber: PyCharm, işlev çağrısını kullanımdan kaldırdığınız için etiketledi. İşlev hala çalışır, ancak görünür şekilde işaretlenir, böylece kodunuzu kullanmamak için değiştirmeyi unutmayın. –