[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