2013-06-10 14 views
6

Mam układ pakiet:Python pkgutil.walk_packages nie wraca podpakietów

scenarios/ 
    __init__.py 
    X/ 
     __init__.py 
     Y/ 
      __init__.py 
    Z/ 
     __init__.py 

mam wykonywany

import scenarios 
pkgutil.walk_packages(scenarios.__path__, scenarios.__name__ + '.') 

Ale to generuje listę łącznie z samymi pakietami X i Z, Y brakuje. Co mogę użyć, aby uzyskać wszystkie podkatalogi?

Dzięki

Odpowiedz

5

Oto teoria: Funkcja walk_packages próby przeniesienie każdego modułu liście. Gdy dojdzie do podpakietu "Y", spróbuje go zaimportować, ale wystąpił błąd. Domyślnie ten błąd jest pomijany. Efektem jest to, że funkcja walk_packages nie powraca do Y. Możesz przetestować tę teorię za pomocą argumentu słowa kluczowego "onerror". Na przykład:

import sys, pkgutil 
from traceback import print_tb 

def onerror(name): 
    print("Error importing module %s" % name) 
    type, value, traceback = sys.exc_info() 
    print_tb(traceback) 

import scenarios 
pkgutil.walk_packages(scenarios.__path__, scenarios.__name__ + '.', onerror=onerror) 
Powiązane problemy