[Python] chiarimento valore ritornato da una funzione

Massimo Capanni massimo.capanni a gmail.com
Lun 30 Maggio 2011 14:28:54 CEST


In effetti quella che ho postato e' la prima versione del programma,
abbastanza *rozza* :)

Vedo di sperimentare i tuoi suggerimenti, grazie


Il 30 maggio 2011 14:16, Lorenzo Sutton <lsutton a libero.it> ha scritto:
> 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
>>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>


Maggiori informazioni sulla lista Python