[Python] chiarimento valore ritornato da una funzione

Massimo Capanni massimo.capanni a gmail.com
Lun 30 Maggio 2011 12:29:27 CEST


Buongiorno a tutti,

ho appena realizzato una funzione che ha uno strano comportamento a
seconda di un certo input.

La funzione e' questa:

=======================================
def subfolder(cartella):
    sotto_cartelle = [] # ritorna una lista di cartelle
    stop = 0 # livello di profondita' delle sottocartelle
    for root, dirs, files in os.walk(cartella):
        if stop == 1:
            return sotto_cartelle
        else:
            for i in dirs:
                sotto_cartelle.append(os.path.join(root,i))
            stop = stop + 1
    return sotto_cartelle (X)
=======================================

in pratica passo alla funzione una cartella e mi restituisce una lista
delle sottocartelle di primo livello nell'albero della directory.
Ad esempio:
cartella = c:

Sottocartelle:
c:\pippo
c:\pluto
c:\paperino
...

Successivamente eseguo questa porzione di codice in una parte del programma,
con il quale ricavo le sottocartelle di ogni sottocartella di primo livello:

=======================================
    lista_cartelle = [] # lista delle
    temp  = []
    temp2 = []

    temp = subfolder(cartella) # inserisco la lista delle cartelle di
primo livello

    for i in temp:
        temp2 = []
        temp2 = subfolder(i) # contiene la lista delle sottocartelle
della cartella 'i'

        for j in temp2:
            lista_cartelle.append(j)
=======================================

adesso succede che se ometto dalla funzione subfolder() la riga
segnata con (X) [return sotto_cartelle], il programma si blocca con un
errore perche' se una delle sottocartelle di primo livello e' vuota,
il ciclo "for j in temp2" si ferma con un Nonetype error.

Tuttavia se inserisco la riga (X) di ritorno del valore il programma funziona.
Quello che non capisco e' che in ogni caso dovrei trovare una cartella
vuota e non un valore None.

Avete idea di questo strano comportamento?

massimo


Maggiori informazioni sulla lista Python