excepciones propias en python
Publicado por Natalia (5 intervenciones) el 29/12/2020 21:08:16
Buenas tardes, estoy tratando de hacer un programa que lea un archivo que contiene nombres de estudiantes y sus notas y las escriba de forma ordenada, el programa debe estar protegido de errores y cualquier error debe parar el programa y ser notificado al usuario, he creado mis propias excepciones como clases que heredan de la clase Exception, la idea es que vaya entrando a cada excepción dependiendo del error que ocurra y al final si no entra en ninguna se captura el error con errno y se lo muestra al usuario, el problema es que me sale NameError: name 'errno' is not defined, y ya he intentado varias cosas y no he podido saber porque, les agradecería su colaboración, aquí les dejo el código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from os import strerror
class ExcepcionDatosAlumnos(Exception):
pass
class LineaErronea(ExcepcionDatosAlumnos):
def __init__(self, linea):
self.linea = linea
class ArchivoVacio(ExcepcionDatosAlumnos):
def __init__(self, filename):
self.filename = filename
print('El archivo ',filename,' se encuentra vacio')
def leerNotas():
notas = {}
clin=0
alumno=''
nota=''
try:
name = input('Digite el nombre del archivo a leer: ')
file= open(name,'rt')
line = file.readline()
if line=='':
ArchivoVacio(name)
return leerNotas()
while line != '':
for ch in line:
if ch >='a' and ch <= 'z' or ch >= 'A' and ch <= 'Z':
alumno += str(ch)
if ch.isdigit() or ord(ch)==46:
nota += str(ch)
try:
if alumno in notas:
notas[alumno] += float(nota)
else:
notas[alumno]= float(nota)
except LineaErronea(clin):
print('Error en línea', linea)
alumno=''
num=''
nota=''
clin+=1
line = file.readline()
for key in sorted(notas.keys()):
print(key,':', notas[key],end='\n')
except Exception as e:
if e.errno == errno.ENOENT:
print('El archivo no existe.')
else:
print('El archivo no se pudo procesar', strerr(e.errno))
leerNotas()
Valora esta pregunta


0