Pánicos
Rust gestiona los errores críticos con un "pánico".
Rust activará un panic si se produce un error grave en runtime:
fn main() { let v = vec![10, 20, 30]; println!("v[100]: {}", v[100]); }
- Los panics se usan para errores irrecuperables e inesperados.
- Los panics son un síntoma de que hay fallos en el programa.
- Los fallos del tiempo de ejecución, como las comprobaciones de límites fallidas, pueden causar un pánico
- Las aserciones (como
assert!
) causan un pánico cuando fallan - Los pánicos con fines específicos pueden usar la macro
panic!
.
- Cuando se produce un pánico, se "desenrolla" la pila y se eliminan los valores como si las funciones hubieran devuelto un resultado.
- Utiliza API que no activen panics (como
Vec::get
) si no se admiten fallos.
This slide should take about 3 minutes.
De forma predeterminada, el panic hará que la stack se desenrolle. El proceso de desenrrollado se puede detectar:
use std::panic; fn main() { let result = panic::catch_unwind(|| "No hay ningún problema."); println!("{result:?}"); let result = panic::catch_unwind(|| { panic!("¡Vaya!"); }); println!("{result:?}"); }
- El catching no es habitual, por lo que recomendamos no implementar excepciones con
catch_unwind
! - Esto puede ser útil en los servidores que deben seguir ejecutándose aunque una sola solicitud falle.
- No funciona si
panic = 'abort'
está definido enCargo.toml
.