2015-05-27 20 views
21

Kodda bir yere bir modül aktardığımdan nasıl emin olabilirim? Ben bazen programımı karıştıran biridir çünkü ben ithal etmek istemediğiniz bir modül var çünkü ben zaten bir modül ithal olmadığını kontrol etmek istiyorumBir python modülünün içe aktarılıp aktarılmadığı nasıl kontrol edilir?

if not has_imported("sys"): 
    print 'you have not imported sys' 

nedenidir. sys.modules dictionary modül adı için

+0

Sadece SystemError() '(ya da diğer istisna' koymak yükseltmek Seçiminizi yapmak istediğiniz) modülün en üstünde. Eğer aslında * bir yere ithal ederseniz, programınız bir iz bırakacak ve çıkacaktır. – larsks

+0

Bir modülün nasıl içe aktarılması programınızı yine de bozar? O kadar da güçlü değil. –

+1

@BillWoodger: belki bu modül [değiştirmek istemediğiniz global durumu değiştirir] (https://stackoverflow.com/questions/23918716/reloading-a-module-gives-functionality-that-isnt-originally-available-by/23918750 # 23918750) -Import. –

cevap

31

Testi: belgelemesi itibaren

import sys 

modulename = 'datetime' 
if modulename not in sys.modules: 
    print 'You have not imported the {} module'.format(modulename) 

:

Bu zaten yüklenmiş olan modülleri modül isimlerini eşleştiren bir sözlük olduğunu. Bir modül ithal edilmişse

+0

Diğer modüller için bu nasıl kullanılabilir? Tüm modülün tarih aralığı – The6thSense

+3

@ VigneshKalai: Bu cümle ayrıştırılamıyor, üzgünüm. 'sys.modules', kullanılan tüm modülleri * yorumlayıcının geçerli örneğinde * içerir. Eğer başka bir Python modülünde * datetime kullanılırsa * orası görünür. –

+0

@VigneshKalai ... ve datetime sadece bir örnek modülüydü, bunun yerine korktuğunuz modülün adıyla değiştirirdiniz. –

8

kullanım sys.modules (Ben örnek olarak unicodedata kullanıyorum) test etmek:

>>> import sys 
>>> 'unicodedata' in sys.modules 
False 
>>> import unicodedata 
>>> 'unicodedata' in sys.modules 
True 
-1
if "sys" not in dir(): 
    print("sys not imported!") 
+0

Yalnızca, modülün geçerli ad alanında içe aktarılıp aktarılmadığını kontrol eder. Ayrıca sys' sadece bir modül değil, bir şey olabilir. – vaultah

İlgili konular