[Python] chiarimento valore ritornato da una funzione
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 ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] ftplib e logging
Ciao a tutti, mi sono avventurato nella libreria logging, e mi chiedevo se fosse possibile ( ho provato in tutti i modi ) utilizzare la libreria logging per loggare l'output di debug ottenuto da "ftp.set_debuglevel(2)". Qualcuno ha avuto modo di avventurarsi nello stesso problema ? Grazie, Antonio ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] chiarimento valore ritornato da una funzione
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 lsut...@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@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] chiarimento valore ritornato da una funzione
get_dirs = lambda x : [d for d in os.listdir(x) if os.path.isdir(d)] get_dirs(.) 2011/5/30 Massimo Capanni massimo.capa...@gmail.com 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 lsut...@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@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] [postgresql-it] psycopg, cursori e connessioni: tenere occupato un id
Per avere un errore devi usare LOCK ... NOWAIT (per il lock su una tabella) o SELECT ... FOR UPDATE NOWAIT (per il lock sui record). Senza il NOWAIT l'effetto è quello di aspettare finché il lock non viene rilasciato. Si infatti, ho risolto così. Ed era pure scritto nella documentazione. Marco ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python