2009-02-23 17 views
5

Bir modülü içe alan bir modülüm var, ancak bazı durumlarda içe aktarılan modül mevcut olmayabilir. Modül içe aktarıldıktan sonra, bir sınıfın içe aktarılan modülden bir sınıf miras alır. Modül mevcut değilse, ImportError istisnasını yakalayacak olsaydım, Python'un modülün geri kalanını ayrıştırmasını nasıl durdurabilirim? Bu mümkün değilse başka çözümlere açığım. Ayrıştırmayı bitirmeden önce bir modülden nasıl çıkılır?

try: 
    from skynet import SkyNet 
except ImportError: 
    class SelfAwareSkyNet(): 
     pass 
    exit_module_parsing_here() 

class SelfAwareSkyNet(SkyNet): 
    pass 

bunu yapmak için sanırım tek yönden

geçerli:: İşte

temel örneği (selfaware.py) 'dir

  • selfaware.py modülünü içe aktarmadan önce, kontrol ederseniz skynet modül kullanılabilir ve basitçe bir saplama sınıfı geçirin veya oluşturun. Bu, selfaware.py'un birden çok kez içe aktarılması durumunda DRY'ye neden olur.
  • selfaware.py içinde, try bloğu ile tanımlanan sınıf var. ör .:

    try: 
        from skynet import SkyNet 
        class SelfAwareSkyNet(SkyNet): 
         pass 
    except ImportError: 
        class SelfAwareSkyNet(): 
         pass 
    
+0

çözümünüz nesi var? Çalışmıyor mu? Bir hata mı geliyor? –

+0

Burada yankı var mı? Tüm yinelenen cevaplarda ne var? Ve her iki yeni kopyanın neden eskiden daha yüksek puanları var? –

+0

@MuMind Sanırım hiper-notanın cevabının, başlangıçta hatalı olduktan sonra düzenlenmiş olduğunu fark etmemiştim. Cevabı kabul ettim. –

cevap

2

Sen kullanabilirsiniz: uygulama farklılık olmadığı takdirde

try: 
    from skynet import SkyNet 
    inherit_from = SkyNet 
except ImportError: 
    inherit_from = object 

class SelfAwareSkyeNet(inherit_from): 
    pass 

Bu çalışır.

Düzeltme: Yorum yapıldıktan sonra yeni bir çözüm.

8

deneyin: Bir başka destekler: fıkra

try: 
    from skynet import SkyNet 

except ImportError: 
    class SelfAwareSkyNet(): 
     pass 

else: 
    class SelfAwareSkyNet(SkyNet): 
     pass 
İlgili konular