sys.modules
Sözlükteki modül adını test edin :
import sys
modulename = 'datetime'
if modulename not in sys.modules:
print 'You have not imported the {} module'.format(modulename)
Dokümantasyondan:
Bu, modül adlarını önceden yüklenmiş modüllerle eşleyen bir sözlüktür.
Bir import
ifadenin iki şey yaptığını unutmayın:
- modül daha önce hiç içe aktarılmamışsa (== içinde mevcut değilse
sys.modules
), yüklenir ve öğesine eklenir sys.modules
.
- Modül nesnesine veya modül ad alanının üyeleri olan nesnelere başvuran geçerli ad alanındaki 1 veya daha fazla adı bağlayın.
İfade modulename not in sys.modules
, 1. adımın gerçekleşip gerçekleşmediğini test eder. 2. adımın sonucunun test edilmesi, import
farklı nesnelere başvurmak için farklı adlar belirlediklerinden tam olarak hangi ifadenin kullanıldığını bilmeyi gerektirir :
import modulename
setleri modulename = sys.modules['modulename']
import packagename.nestedmodule
setler packagename = sys.modules['packagename']
(kaç tane ek seviye eklerseniz ekleyin)
import modulename as altname
setleri altname = sys.module['modulename']
import packagename.nestedmodule as altname
setleri altname = sys.modules['packagename.nestedmodule']
from somemodule import objectname
setleri objectname = sys.modules['somemodule'].objectname
from packagename import nestedmodulename
setleri nestedmodulename = sys.modules['packagename.nestedmodulename']
(adında hiçbir nesne yoktu sadece nestedmodulename
içinde packagename
bu aktarmadan önce ad, iç içe modül için ilave bir isim bu noktada ana paket ad alanına eklenir)
from somemodule import objectname as altname
setleri altname = sys.modules['somemodule'].objectname
from packagename import nestedmodulename as altname
setleri altname = sys.modules['packagename.nestedmodulename']
(adında hiçbir nesne yoktu sadece nestedmodulename
içinde packagename
bu aktarmadan önce ad, iç içe modül için ilave bir isim bu noktada ana paket ad alanına eklenir)
İçe aktarılan nesnenin bağlı olduğu adın belirli bir ad alanında olup olmadığını test edebilirsiniz:
'importedname' in dir()
'importedname' in globals()
'importedname' in globals(sys.modules['somemodule'])
Bu, o modülden belirli bir modüle veya nesneye atıfta bulunup bulunmadığını size yalnızca adın var olduğunu (bağlı olduğunu) söyler. sys.modules
Adın o zamandan beri tamamen başka bir şeye ayarlandığını göz ardı etmeniz gerekiyorsa, o nesneyi daha ayrıntılı olarak inceleyebilir veya içinde mevcut olanla aynı nesne olup olmadığını test edebilirsiniz .
raise SystemError()
İçe aktarmak istemediğiniz modülün üstüne (veya seçtiğiniz başka bir istisna) koyun . Eğer varsa do aslında bir yerde içe, programınız bir Traceback ve çıkış fırlatır.