[Python] chiarimento valore ritornato da una funzione

Lorenzo Sutton lsutton a libero.it
Lun 30 Maggio 2011 14:16:41 CEST


Ciao Massimo,

Massimo Capanni wrote:
> 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.
Sei sicuro che non si possa fare in maniera pił semplice per avere solo
il primo sotto-livello?

- Sempre con os.walk in teoria ti basta una sola riga... Considera il
secondo elemento della prima tripla che ottieni (fai delle prove con print)

- Oppure considera os.listdir combinato con os.path.isdir ...

In entrambi i casi occhio ai path relativi VS path assoluti a seconda di
quello che devi fare e dell'input che dai alla funzione.

Giusto per darti un altro punto di vista ;)

Lorenzo.
> 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
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>


Maggiori informazioni sulla lista Python