2010-11-16 15 views

risposta

4

E 'perché io sono stupido e non riesco a leggere:

Senza un secondo argomento, o deve essere un oggetto collezione che supporta il protocollo di iterazione (il metodo iter()), oppure deve supportare il protocollo di sequenza (il metodo getitem() con argomenti interi che iniziano da 0). Se non supporta nessuno di questi protocolli, viene sollevata l'eccezione TypeError.

La soluzione è fornire una sentinella di stringa vuota.

with open("mydata.txt") as fp: 
    for line in iter(fp.readline, ''): 
     print line 
+1

+1: non avrei usato la parola * stupido *, però. :) A proposito, se risolvi il tuo problema, è comunque incoraggiato ad accettare la risposta corretta (la tua), usando il segno di spunta a sinistra. –

+0

Chi ha downvoted questo? Spiega per favore. –

+0

Space_C0wb0y, ho provato: "Puoi accettare la tua risposta in 2 giorni". –

-2

L'unica cosa a cui riesco a pensare è che non si dispone di un file chiamato mydata.txt o che si trova nel posto sbagliato.

+0

E 'ovviamente già riuscito ad aprire il file - l'errore è sulla linea 2, è allineata 1, e sta dicendo non è iterabile, non che non è aperto . –

2

Python file oggetti sono iterabile, quindi non v'è alcun bisogno di chiamare esplicitamente iter(). Per leggere un file riga per riga si può semplicemente scrivere:

with open("mydata.txt") as fp: 
    for line in fp: 
     print line 
+0

Questa non è la soluzione al problema dell'OP. –

+0

Space_C0wb0y, anche se non è la soluzione per la mia domanda attuale, ma d'ora in poi, probabilmente non userò mai iter + combinazione readline grazie a Tendayi :) –

Problemi correlati