UT7 - Excepciones y ficheros - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Bueno, ahora vamos a continuar con las excepciones. Las excepciones las vamos a ver de una forma, o las voy a intentar explicar de una forma que sea muy sencilla para que entendamos el concepto.
00:00:00
Esto ya lo vimos en C. Básicamente es una forma de controlar posibles errores normalmente que se producen durante el proceso de ejecución,
00:00:10
porque un dato esté mal introducido, un fichero que se haya leído no esté bien hecho o tenga algún error, algo de ese estilo.
00:00:19
¿Vale? Es decir, que no son errores de que hayamos escrito algo mal en el programa.
00:00:27
Vale. Bueno, ahí os he puesto un ejemplo de cómo manejábamos estos errores en C.
00:00:35
No quiero entretenerme con esto mucho porque básicamente esto ya lo vimos en la primera evaluación.
00:00:40
Bueno, era un codiguito que hacía una lectura y en función de si la lectura que se había leído por el scanf era buena o no,
00:00:47
pues daba un error o no daba error. ¿Vale? Y algo parecido con la lectura de fichero.
00:00:54
Bien, si esto no lo llevamos a Python, que es lo que aquí al final ahora nos interesa, ¿vale? Fijaros, nosotros ahora lo que vamos a tener es básicamente una nueva estructura que se llama try y except, ¿vale?
00:00:57
a un flotante esto lo hemos dicho en clase puede producir errores porque puede producir
00:01:26
errores porque imaginaros que yo en vez de haber escrito un número escrito una palabra escrito
00:01:32
casa pues casa va a dar un error vale entonces lo que nosotros vamos a hacer es que el programa sea
00:01:36
capaz de ejecutarse y seguir funcionando normalmente pero que nos notifique de alguna
00:01:42
forma o que él sepa que un error entonces lo que nosotros haremos será que digamos para que
00:01:49
entendamos intenta convertir en la cadena flotante vale y si no puede vale en el caso de que no pueda
00:01:57
devuelve un error y ese error va a ser un texto por pantalla que voy a decir esto no es un número
00:02:04
vale y luego el número que va a devolver la función en vez de ser un valor vale por ejemplo
00:02:09
Si hubiera pasado el 4,5, el 4,8, pues va a ser nada, ¿vale?
00:02:15
Un fichero vacío, nulo, ¿vale?
00:02:19
Y esto nos lo podemos llevar exactamente igual a la lectura de ficheros, ¿vale?
00:02:21
Que lo veremos ahora más adelante.
00:02:24
Intenta abrir un fichero en modo escritura, ¿vale?
00:02:26
Lee su contenido y luego ciérralo.
00:02:31
Y ahora, puedes encontrarte varios errores.
00:02:33
El primer error que te puedes encontrar es que el fichero no te ha encontrado, ¿vale?
00:02:35
Pues que ese fichero no exista.
00:02:38
Por ejemplo, el fichero datos.txt no exista, ¿vale?
00:02:40
Y el otro error puede ser que no tenga permisos, ¿vale? Pues que sea un fichero que no tenga permisos de lectura, pues eso también puede producir errores, ¿vale? Pero el programa este detectaría el error y seguiría funcionando tan tranquilo, ¿vale?
00:02:42
¿Vale? Había puesto un ejemplo de una estructura completa que tiene varios elementos, ¿vale? Tiene varios except, ¿vale? Como veis aquí hay dos, ¿vale? Y luego tiene también otra cosa que podemos implementar que es un else, ¿vale? Que solo se va a ejecutar si no hubo ninguna de las excepciones, ¿vale? Las excepciones que nosotros hemos puesto, ¿cuáles son?
00:02:57
Pues fijaros, si lo que estamos haciendo es el mismo programa, un programa que convierte a entero, ¿vale? Pues lo primero que hace, si ese entero es mayor que 0, ¿vale? Si lo consigue convertir, ¿vale? Porque RSSI tiene que ser 0, tiene que ser mayor que 0, perdón, ¿vale? Perdón, el RSSI siempre tiene que ser negativo, ¿vale?
00:03:16
Entonces, si no es negativo, es decir, cuando lo convierte y sale a positivo, la conversión no va a dar un error, porque un número positivo está bien convertido en entero, pero si diera positivo nosotros tenemos que forzar en cierta forma ese error para que el programa no funcione.
00:03:36
Entonces lo que haremos será raise, como eleva, ¿vale? Un error de valor. Y aparte imprimimos un texto que es rssi, debe ser negativo. Y ahora, de ahí entraríamos en este step, ¿vale? Es decir, como se ha producido un error de valor, pues notificamos el error de valor, ¿vale? Y devuelve nada.
00:03:50
Y ahora, si hay un tipo de error, es decir, y esto ya sería porque en vez de haber pasado un entero, hayamos pasado una palabra, una letra, lo que sea, ¿vale? Pues sí que pondría tipo de dato incorrecto, ¿vale?
00:04:11
Y si ninguna de estas dos excepciones salta, pues imprímeles y dice RSSI válido, imprime su valor, ¿vale?
00:04:24
Devuelve ese RSSI, eso es lo que va a devolver la función procesar medición, ¿vale?
00:04:35
Y luego tenemos el finally, que el finally siempre que esté puesto siempre se va a ejecutar.
00:04:42
Se va a ejecutar, perdón, hay un error o no.
00:04:47
Entonces, ¿qué va a ejecutar aquí? Pues print proceso completado, ¿vale? Es decir, es una forma de tener un mensaje de log o un mensaje de traza que nos indica que el programa está funcionando bien, ¿vale?
00:04:51
Entonces, para que lo entendamos con un diagrama de flujo, básicamente lo que haríamos sería un try, ¿vale? Vamos a intentar hacer algo, convertir un fichero, convertir un dato, leer un fichero, lo que sea y ahora comprobamos si hay error, que si lo hay, generamos una excepción, ¿vale?
00:05:05
Y si generamos una excepción, siempre ejecutaremos el finally. Y ahora, que no hay ningún error, pues nos vamos al else, ¿vale? Y generamos y volvemos otra vez al else, vamos al finally, ¿vale? Lo que digo, el finally siempre se ejecuta, ¿vale?
00:05:20
Y esto que decía antes, raise, ¿vale? Pues es una forma de nosotros lanzar una excepción manualmente. En este código anterior, ¿vale? La conversión entera no daba ningún error, simplemente convertía un número positivo.
00:05:33
Pues nosotros para forzar ese error lo que hacíamos era raiseValueError, ¿vale? Forzar ese error porque sabemos que ese valor no puede ser positivo.
00:05:50
Y aquí he puesto tipos de excepciones más frecuentes, ¿vale? ValueError, que es pues una conversión de tipo inválida, ¿vale?
00:05:59
KeyError, es decir, que sea un... estamos hablando de diccionarios que ya lo hemos visto antes y que ese clave no exista, ¿vale?
00:06:08
Un índice de error, porque estamos incidiendo en una lista que no tenga ese valor.
00:06:15
Un fichero no existido, que el fichero no tenga permisos.
00:06:19
Una división entre ceros, ¿vale? Que tampoco se puede.
00:06:22
Tipos incompatibles de datos, es decir, sumar texto y número, ¿vale?
00:06:26
Eso no tiene sentido, da error, ¿vale?
00:06:30
Y luego, errores del sistema operativo, ¿vale?
00:06:32
Y aquí os he puesto un ejemplo de un programa típico que podríamos hacer en un sistema de telecomunicaciones, ¿vale?
00:06:39
Que es leer un valor donde ponemos un prompt, es decir, una petición, pues quiero leer el RSSI o quiero leer, aquí he puesto como ejemplo de ejecución el RSSI, ¿vale?
00:06:46
Y le digo, el tipo, por defecto quiero que sea flotante, pero yo aquí en vez de haberle puesto float podría ponerle int, ¿vale?
00:06:57
Porque sí quiero que sea entero.
00:07:03
¿Cuál es su valor mínimo y su valor máximo, vale?
00:07:05
Y entonces estáis leyendo, hace su try y hace su except, ¿vale?
00:07:07
En caso de que el valor sea malo.
00:07:11
Y aquí veis que forzamos, si yo le he puesto que el valor tenga un valor, que deba de tener un valor mínimo y deba de tener un valor máximo, ¿vale? Pues forzamos esos errores con ese raise, ¿vale?
00:07:13
Si analizáis un poco lo que hemos visto antes podréis entenderlo mejor.
00:07:27
Y continuamos con ficheros, ¿vale? Ficheros, en C os dejé los apuntes para que los vierais, pero no trabajamos sobre ellos.
00:07:33
En el caso de Python sí vamos a trabajar porque es súper sencillo y muy fácil, ¿vale?
00:07:42
Entonces, aquí he puesto la comparativa para que veáis las diferencias, pero nos vamos a centrar aquí.
00:07:47
Y he puesto tres formas de abrir ficheros, ¿vale?
00:07:52
Que lo vamos a hacer siempre con with open, ¿vale?
00:07:54
Y eso es cómodo porque al poner with gestiona directamente que el fichero se cierre.
00:07:57
No tenemos nosotros que hacer como hacíamos aquí en C, ¿vale?
00:08:03
O como si no pusiéramos en Python with también lo tendríamos que hacer.
00:08:06
Estar pendientes de cerrar ese fichero, ¿vale?
00:08:10
Entonces, tenemos tres opciones. Ir leyendo línea a línea, que sería esta opción, ¿vale? Abrimos un fichero en los .txt en modo lectura y ahora a ese fichero lo vamos a llamar f y ahora vamos leyendo línea a línea en f, ¿vale? Hasta que detectemos el final de línea, ¿vale?
00:08:12
Luego también podemos leer todo el fichero a la vez, poniendo f.read, ¿vale? Leeríamos todo el fichero y entonces en contenido se guardaría todo el fichero. Otra opción. Y luego podemos ir leyendo línea a línea y lo vamos guardando como una lista, ¿vale? Pues entonces líneas de cero tendríamos la primera línea, líneas de una segunda línea, bueno, esto dependiendo del programa habrá una forma que nos interese más u otra.
00:08:34
Ahora, ejemplo de escritura, ¿vale? Aquí hay varios modos de abrir ficheros, esto no tiene que ver únicamente con escritura, es modo de abrir ficheros, que lo hemos visto también aquí, ¿vale? Aquí os he enseñado cómo abríamos con R, ¿vale? R que es el modo lectura, que es el modo por defecto.
00:09:00
Luego tenemos el modo de escritura, que borra si el archivo ya existe, ¿vale?
00:09:17
Y luego tenemos el modo de append, de añadir al final, es decir, si el fichero ya existe es recomendable utilizar a, ¿vale?
00:09:21
Luego tenemos lectura y escritura, crear un fichero, lectura binaria y escritura binaria, ¿vale?
00:09:28
Y bueno, aquí os pongo un ejemplo de escribir un log de red, ¿vale?
00:09:33
Bueno, aquí tenemos una función, registrar evento, que lo que recibe es el nombre del fichero, el tipo del evento y por defecto el nivel.
00:09:37
Yo he puesto por defecto info, ¿vale? Pero veis que cuando hago uso de aquí, en uno de ellos hago uso warning, en este no le pongo nada, por lo tanto pasa info y aquí paso error, ¿vale? Estos dos, ese warning serían los dos el nivel, ¿vale? Sustituiría en info.
00:09:45
Bien, pues lo que hacemos es que en timestamp creo un tiempo, ¿vale?
00:10:02
Utilizando esta función, pues guardo el año, el mes y el día, la hora, los minutos y los segundos
00:10:07
Y luego me creo una cadena de texto que está formada por esa fecha, esa línea temporal
00:10:11
El nivel, ¿vale? Que por defecto es info, a no ser que yo le pase algo
00:10:18
Y luego el evento, ¿vale? En este caso el evento, pues ya veis que pone
00:10:23
API desconectado, RSS y AP2, umbral superado en AP3, ¿vale?
00:10:26
¿Y qué hacemos? Abrimos el fichero en modo append, ¿vale? Y vamos escribiendo línea a línea. ¿Vale? Muy sencillito. Si hay varias líneas, pero puede ser que no.
00:10:31
Aquí os he puesto un ejemplo sobre cómo leer un fichero CSV
00:10:45
Aquí solo voy a entretenerme porque esto ya lo he explicado un poco
00:10:54
Veis que hay una excepción, un try step
00:10:59
Y me voy a centrar en esto que veis aquí, en esta línea
00:11:01
Para que entendamos algunas funciones
00:11:07
Campos, ¿qué hace?
00:11:09
Vamos a leer una línea
00:11:11
Utilizando cabecera igual, f redline
00:11:13
Pues ahí leeremos la cabecera. ¿Y ahora qué hacemos con la cabecera? Pues en primer lugar, hacemos un split coma. ¿Qué hace el split coma? El split coma lo que va a hacer es dividirnos el fichero en donde haya una coma.
00:11:17
Donde haya una coma, nos lo va a dividir. Entonces, nosotros vamos a tener, pues fijaros, aquí vamos a tener, vamos a separar por esa coma y va a separar por esa coma, ¿vale? Entonces, lo tendríamos ahí separado.
00:11:30
y luego strip lo que hace es que elimina los espacios
00:11:45
entonces todos los espacios que haya
00:11:47
lo elimina, ¿vale?
00:11:49
y es una forma pues de tener los campos
00:11:51
más cómodos, ¿vale?
00:11:53
y así luego, veis que aquí
00:11:57
¿vale? con esta función
00:11:59
nos vamos generando
00:12:01
en registro, ¿vale?
00:12:03
vamos guardando un diccionario donde vamos guardando
00:12:05
el campo, ¿vale?
00:12:07
y el valor, que el valor lo leemos
00:12:09
de una forma parecida, ¿vale? separamos por coma
00:12:11
y luego quitamos los espacios
00:12:13
¿vale? es una forma pues
00:12:14
A partir de un fichero CSV, que es como si fuera un... CSV viene de la sigla de Coma Separated Values, ¿vale? A partir de ahí es un fichero, es decir, valores separados por comas, es una forma de crearnos una lista con diferentes valores, ¿vale?
00:12:17
Y aquí os pongo un ejemplo sobre cómo escribirlo. El proceso es parecido, ¿vale? Solo que ahora lo que vamos a hacer es unirlo. Fijaros, hacemos un join, los campos los unimos utilizando como elemento de unión las comas, ¿vale? Pero bueno, es que esto no tiene tampoco más historia. Es bastante estándar.
00:12:42
Aquí pongo un ejemplo de lectura de un fichero de log, ¿vale?
00:13:07
Veis aquí, esto es el fichero de log estándar, que tiene tres campos, línea de tiempo, punto de acceso y nivel de RSSI, ¿vale?
00:13:11
Separados por la barra.
00:13:19
Entonces, fijaros, hacemos algo parecido.
00:13:21
Lo primero que hacemos es leer la línea y quitar los espacios, todos los espacios que haya.
00:13:24
¿Vale? Ahora, si la línea, si no hay ninguna línea, está vacía o si tiene un asterisco, asumimos que es una línea vacía o comentario. Por lo tanto, todo lo que haya después nos lo saltamos. Hacemos un continuo, nos saltamos todo y volvemos. ¿Vale? Entonces, de nuevo, cogemos la siguiente línea.
00:13:32
Y ahora le quitamos los espacios, ¿vale? Y luego lo que hacemos es que las separamos por barras, es decir, donde hay una barra separamos.
00:13:50
Y entonces vamos a tener un array, ¿vale? Donde partes, va a tener partes 0, partes 1 y partes 2, ¿vale?
00:14:01
¿Vale? Entonces, si el tamaño de partes es distinto que 3, ¿vale? Da un error o suma un error y ahora continúa, ¿vale? Continúa y hace un try. ¿Qué hace ese try? Pues va a crear un diccionario de diccionarios, ¿vale? Va a crear un ts, ¿vale? Lo que sería el timestamp, la marca de tiempo, un ap del punto de acceso y un nivel de rssi, ¿vale?
00:14:11
Y lo mismo, lo vuelvo otra vez a quitar los espacios para asegurarse que si son números, pues que no haya ningún error, ¿vale?
00:14:37
Y el resto, pues un poco estándar de cosas que ya hemos visto.
00:14:43
Y este código, pues como veis, ¿vale? Cargaría cuatro eventos bien y un error, ¿vale?
00:14:48
Cargaría un error porque este de aquí no tiene longitud 3, ¿vale? Entonces daría un error.
00:14:53
Y finalmente os he dejado un proyecto, esto lo he dejado para que lo analicéis vosotros, para que tengáis un ejemplo de un analizado de red de Wi-Fi.
00:15:00
Puede serviros para cualquier cosa.
00:15:13
Y como siempre al final, una comparativa entre conceptos que hemos visto en C y las ventajas que nos permite hacerlo en Python como lenguaje de programación.
00:15:16
Pues esto es todo de la unidad de trabajo 7.
00:15:27
- Valoración:
- Eres el primero. Inicia sesión para valorar el vídeo.
- 1
- 2
- 3
- 4
- 5
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Autor/es:
- Fernando Martínez Martí
- Subido por:
- Fernando M.
- Licencia:
- Reconocimiento - No comercial - Compartir igual
- Visualizaciones:
- 5
- Fecha:
- 20 de marzo de 2026 - 12:14
- Visibilidad:
- Clave
- Centro:
- IES PACIFICO
- Duración:
- 15′ 35″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 37.79 MBytes
Para publicar comentarios debes entrar con tu nombre de usuario de EducaMadrid.
Comentarios
Este vídeo todavía no tiene comentarios. Sé el primero en comentar.