Hola a todos.
Uso Python 3.3.4.
Estoy haciendo una clase que lee líneas de un fichero.
Al constructor de esta clase le paso un parámetro llamado "reader". En el constructor de clase compruebo que el parámetro que me pasan es de tipo "reader", si no lo es, lanzo excepción.
Mi problema es que, no se por qué, el programa me da error cuando intento hacer el primer "readline()".
El error que me sale es:
Traceback (most recent call last):
File "D:\Mis documentos\workspaces\Cosas\asd\p2.py", line 13, in <module>
x = bf.readline()
AttributeError: '_io.TextIOWrapper' object has no attribute 'readinto'
¿Alguien me puede explicar que ocurre? gracias. Adjunto el código:
Uso Python 3.3.4.
Estoy haciendo una clase que lee líneas de un fichero.
Al constructor de esta clase le paso un parámetro llamado "reader". En el constructor de clase compruebo que el parámetro que me pasan es de tipo "reader", si no lo es, lanzo excepción.
Mi problema es que, no se por qué, el programa me da error cuando intento hacer el primer "readline()".
El error que me sale es:
Traceback (most recent call last):
File "D:\Mis documentos\workspaces\Cosas\asd\p2.py", line 13, in <module>
x = bf.readline()
AttributeError: '_io.TextIOWrapper' object has no attribute 'readinto'
¿Alguien me puede explicar que ocurre? gracias. Adjunto el código:
Código [Seleccionar]
import threading
import io
class FileThread(threading.Thread):
def __init__(self,reader):
#aqí compruebo que es un BufferedReader
if not (type(reader)==io.BufferedReader):
raise AttributeError;
self.n=0;
self.m=0;
self.s="";
self.ls="";
self.reader=reader;
self.flag=False;
def __largerLine(self):
#El error ocurre en la siguiente linea
self.s=self.reader.readline(); #ERROR
self.ls=self.s;
while(self.s):
self.n=len(self.s)
if(self.n>self.m):
self.m=self.n;
self.ls=self.s;
self.s=self.reader.readline();
def getLargerLine(self):
return (None,self.ls)[self.flag]
def run(self):
self.__largerLine();
self.flag=True;
#PRUEBAS:
fich = open("pr","r");
reader = io.BufferedReader(fich)
ft = FileThread(reader);
print(ft.getLargerLine())
ft.run();
l=ft.getLargerLine()
print(l)