Capítulo 9: Manejo de Errores y Excepciones
9.3: Provocando Excepciones
En Python, las excepciones son eventos que pueden ocurrir cuando hay un error o una condición excepcional durante la ejecución de un programa. Estos pueden ser causados por una variedad de factores, como la entrada incorrecta o un evento inesperado. Como hemos visto antes, Python provoca excepciones automáticamente cuando encuentra un error. Sin embargo, también puedes provocar excepciones manualmente en tu código usando la instrucción raise. Esto es particularmente útil cuando quieres imponer ciertas condiciones o restricciones en tu programa, como verificar la entrada válida o asegurarte de que ciertos recursos estén disponibles antes de ejecutar un fragmento de código.
Para provocar una excepción, puedes usar la palabra clave raise seguida de la clase de excepción o una instancia de la clase de excepción que deseas provocar. Esto puede ser útil para proporcionar contexto adicional para el error, como especificar el tipo de error que ocurrió o proporcionar un mensaje personalizado al usuario. Al provocar excepciones en tu código, puedes mejorar su solidez y hacerlo más confiable, asegurando que pueda manejar una amplia gama de entradas y condiciones.
Aquí está la sintaxis básica para provocar una excepción:
raise ExceptionClass("Error message")
Por ejemplo, puedes provocar una excepción ValueError si deseas forzar que un cierto valor esté dentro de un rango específico:
def validate_age(age):
if age < 0 or age > 150:
raise ValueError("Invalid age: Age must be between 0 and 150")
try:
validate_age(-5)
except ValueError as ve:
print(ve)
En este ejemplo, la función validate_age verifica si la edad dada está dentro del rango válido (0 a 150). Si no lo está, se provoca una excepción ValueError con un mensaje de error personalizado. Luego usamos un bloque try-except para llamar a la función y manejar la excepción si ocurre.
Cuando provocas una excepción en tu código, esencialmente estás indicando que algo ha salido mal y que el flujo normal de tu programa no puede continuar. Esto significa que el control se transfiere al bloque try-except más cercano, que es un bloque de código diseñado para manejar excepciones de una manera específica. Si no hay tal bloque, el programa finalizará y se mostrará el mensaje de error.
Pero, ¿por qué es tan importante provocar excepciones en primer lugar? Bueno, hacerlo realmente puede ayudarte a crear código más robusto y resistente a errores. Al detectar y manejar errores al principio del código, puedes evitar que causen un comportamiento inesperado o incluso que bloqueen tu programa por completo. Esto puede ahorrarte tiempo y frustración a largo plazo, así como hacer que tu código sea más confiable y fácil de mantener.
Ejercicio 9.3.1: Provocando excepciones para entrada inválida
Título: Validar entrada de usuario
Descripción: Escriba una función llamada validate_input
que tome una cadena como entrada y provoque una excepción ValueError
si la cadena de entrada contiene algún carácter especial (por ejemplo, !, @, #, etc.).
Instrucciones:
- Cree una función
validate_input
que tome una cadenainput_str
. - Verifique si la cadena de entrada contiene caracteres especiales.
- Si los contiene, provoque una
ValueError
con un mensaje de error personalizado. - Pruebe la función con entradas válidas e inválidas usando un bloque try-except.
Solución:
import string
def validate_input(input_str):
if any(char in string.punctuation for char in input_str):
raise ValueError("Invalid input: The input should not contain special characters")
try:
validate_input("HelloWorld!")
except ValueError as ve:
print(ve)
try:
validate_input("HelloWorld")
except ValueError as ve:
print(ve)
Salida:
Invalid input: The input should not contain special characters
Ejercicio 9.3.2: Provocando excepciones para contraseñas inválidas
Título: Verificador de robustez de contraseñas
Descripción: Cree una función llamada validate_password
que verifique si una contraseña dada es robusta. Una contraseña robusta se define como aquella que tiene al menos 8 caracteres, contiene al menos una letra mayúscula, una letra minúscula, un dígito y un carácter especial. Provoque una excepción ValueError
si la contraseña no cumple con estos criterios.
Instrucciones:
- Cree una función
validate_password
que tome una cadenapassword
. - Verifique si la contraseña cumple con los criterios de una contraseña robusta.
- Si no los cumple, provoque una
ValueError
con un mensaje de error personalizado. - Pruebe la función con contraseñas válidas e inválidas usando un bloque try-except.
Solución:
import string
def validate_password(password):
if len(password) < 8:
raise ValueError("Invalid password: Password must have at least 8 characters")
if not any(char.isupper() for char in password):
raise ValueError("Invalid password: Password must have at least one uppercase letter")
if not any(char.islower() for char in password):
raise ValueError("Invalid password: Password must have at least one lowercase letter")
if not any(char.isdigit() for char in password):
raise ValueError("Invalid password: Password must have at least one digit")
if not any(char in string.punctuation for char in password):
raise ValueError("Invalid password: Password must have at least one special character")
try:
validate_password("WeakPwd1")
except ValueError as ve:
print(ve)
try:
validate_password("StrongPwd1!")
except ValueError as ve:
print(ve)
Salida:
Invalid password: Password must have at least one special character
Ejercicio 9.3.3: Provocando excepciones para direcciones de correo electrónico inválidas
Título: Validador de correo electrónico
Descripción: Cree una función llamada validate_email
que verifique si una dirección de correo electrónico dada es válida. Una dirección de correo electrónico válida debe tener el siguiente formato: <nombre de usuario>@<dominio>.<tld>
. Provoque una excepción ValueError
si la dirección de correo electrónico no cumple con estos criterios.
Instrucciones:
- Cree una función
validate_email
que tome una cadenaemail
. - Verifique si la dirección de correo electrónico es válida.
- Si no lo es, provoque una
ValueError
con un mensaje de error personalizado. - Pruebe la función con direcciones de correo electrónico válidas e inválidas usando un bloque try-except.
Solución:
import re
def validate_email(email):
email_regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if not re.match(email_regex, email):
raise ValueError("Invalid email address")
try:
validate_email("invalid_email.com")
except ValueError as ve:
print(ve)
try:
validate_email("valid.email@example.com")
except ValueError as ve:
print(ve)
Salida:
Invalid email address
9.3: Provocando Excepciones
En Python, las excepciones son eventos que pueden ocurrir cuando hay un error o una condición excepcional durante la ejecución de un programa. Estos pueden ser causados por una variedad de factores, como la entrada incorrecta o un evento inesperado. Como hemos visto antes, Python provoca excepciones automáticamente cuando encuentra un error. Sin embargo, también puedes provocar excepciones manualmente en tu código usando la instrucción raise. Esto es particularmente útil cuando quieres imponer ciertas condiciones o restricciones en tu programa, como verificar la entrada válida o asegurarte de que ciertos recursos estén disponibles antes de ejecutar un fragmento de código.
Para provocar una excepción, puedes usar la palabra clave raise seguida de la clase de excepción o una instancia de la clase de excepción que deseas provocar. Esto puede ser útil para proporcionar contexto adicional para el error, como especificar el tipo de error que ocurrió o proporcionar un mensaje personalizado al usuario. Al provocar excepciones en tu código, puedes mejorar su solidez y hacerlo más confiable, asegurando que pueda manejar una amplia gama de entradas y condiciones.
Aquí está la sintaxis básica para provocar una excepción:
raise ExceptionClass("Error message")
Por ejemplo, puedes provocar una excepción ValueError si deseas forzar que un cierto valor esté dentro de un rango específico:
def validate_age(age):
if age < 0 or age > 150:
raise ValueError("Invalid age: Age must be between 0 and 150")
try:
validate_age(-5)
except ValueError as ve:
print(ve)
En este ejemplo, la función validate_age verifica si la edad dada está dentro del rango válido (0 a 150). Si no lo está, se provoca una excepción ValueError con un mensaje de error personalizado. Luego usamos un bloque try-except para llamar a la función y manejar la excepción si ocurre.
Cuando provocas una excepción en tu código, esencialmente estás indicando que algo ha salido mal y que el flujo normal de tu programa no puede continuar. Esto significa que el control se transfiere al bloque try-except más cercano, que es un bloque de código diseñado para manejar excepciones de una manera específica. Si no hay tal bloque, el programa finalizará y se mostrará el mensaje de error.
Pero, ¿por qué es tan importante provocar excepciones en primer lugar? Bueno, hacerlo realmente puede ayudarte a crear código más robusto y resistente a errores. Al detectar y manejar errores al principio del código, puedes evitar que causen un comportamiento inesperado o incluso que bloqueen tu programa por completo. Esto puede ahorrarte tiempo y frustración a largo plazo, así como hacer que tu código sea más confiable y fácil de mantener.
Ejercicio 9.3.1: Provocando excepciones para entrada inválida
Título: Validar entrada de usuario
Descripción: Escriba una función llamada validate_input
que tome una cadena como entrada y provoque una excepción ValueError
si la cadena de entrada contiene algún carácter especial (por ejemplo, !, @, #, etc.).
Instrucciones:
- Cree una función
validate_input
que tome una cadenainput_str
. - Verifique si la cadena de entrada contiene caracteres especiales.
- Si los contiene, provoque una
ValueError
con un mensaje de error personalizado. - Pruebe la función con entradas válidas e inválidas usando un bloque try-except.
Solución:
import string
def validate_input(input_str):
if any(char in string.punctuation for char in input_str):
raise ValueError("Invalid input: The input should not contain special characters")
try:
validate_input("HelloWorld!")
except ValueError as ve:
print(ve)
try:
validate_input("HelloWorld")
except ValueError as ve:
print(ve)
Salida:
Invalid input: The input should not contain special characters
Ejercicio 9.3.2: Provocando excepciones para contraseñas inválidas
Título: Verificador de robustez de contraseñas
Descripción: Cree una función llamada validate_password
que verifique si una contraseña dada es robusta. Una contraseña robusta se define como aquella que tiene al menos 8 caracteres, contiene al menos una letra mayúscula, una letra minúscula, un dígito y un carácter especial. Provoque una excepción ValueError
si la contraseña no cumple con estos criterios.
Instrucciones:
- Cree una función
validate_password
que tome una cadenapassword
. - Verifique si la contraseña cumple con los criterios de una contraseña robusta.
- Si no los cumple, provoque una
ValueError
con un mensaje de error personalizado. - Pruebe la función con contraseñas válidas e inválidas usando un bloque try-except.
Solución:
import string
def validate_password(password):
if len(password) < 8:
raise ValueError("Invalid password: Password must have at least 8 characters")
if not any(char.isupper() for char in password):
raise ValueError("Invalid password: Password must have at least one uppercase letter")
if not any(char.islower() for char in password):
raise ValueError("Invalid password: Password must have at least one lowercase letter")
if not any(char.isdigit() for char in password):
raise ValueError("Invalid password: Password must have at least one digit")
if not any(char in string.punctuation for char in password):
raise ValueError("Invalid password: Password must have at least one special character")
try:
validate_password("WeakPwd1")
except ValueError as ve:
print(ve)
try:
validate_password("StrongPwd1!")
except ValueError as ve:
print(ve)
Salida:
Invalid password: Password must have at least one special character
Ejercicio 9.3.3: Provocando excepciones para direcciones de correo electrónico inválidas
Título: Validador de correo electrónico
Descripción: Cree una función llamada validate_email
que verifique si una dirección de correo electrónico dada es válida. Una dirección de correo electrónico válida debe tener el siguiente formato: <nombre de usuario>@<dominio>.<tld>
. Provoque una excepción ValueError
si la dirección de correo electrónico no cumple con estos criterios.
Instrucciones:
- Cree una función
validate_email
que tome una cadenaemail
. - Verifique si la dirección de correo electrónico es válida.
- Si no lo es, provoque una
ValueError
con un mensaje de error personalizado. - Pruebe la función con direcciones de correo electrónico válidas e inválidas usando un bloque try-except.
Solución:
import re
def validate_email(email):
email_regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if not re.match(email_regex, email):
raise ValueError("Invalid email address")
try:
validate_email("invalid_email.com")
except ValueError as ve:
print(ve)
try:
validate_email("valid.email@example.com")
except ValueError as ve:
print(ve)
Salida:
Invalid email address
9.3: Provocando Excepciones
En Python, las excepciones son eventos que pueden ocurrir cuando hay un error o una condición excepcional durante la ejecución de un programa. Estos pueden ser causados por una variedad de factores, como la entrada incorrecta o un evento inesperado. Como hemos visto antes, Python provoca excepciones automáticamente cuando encuentra un error. Sin embargo, también puedes provocar excepciones manualmente en tu código usando la instrucción raise. Esto es particularmente útil cuando quieres imponer ciertas condiciones o restricciones en tu programa, como verificar la entrada válida o asegurarte de que ciertos recursos estén disponibles antes de ejecutar un fragmento de código.
Para provocar una excepción, puedes usar la palabra clave raise seguida de la clase de excepción o una instancia de la clase de excepción que deseas provocar. Esto puede ser útil para proporcionar contexto adicional para el error, como especificar el tipo de error que ocurrió o proporcionar un mensaje personalizado al usuario. Al provocar excepciones en tu código, puedes mejorar su solidez y hacerlo más confiable, asegurando que pueda manejar una amplia gama de entradas y condiciones.
Aquí está la sintaxis básica para provocar una excepción:
raise ExceptionClass("Error message")
Por ejemplo, puedes provocar una excepción ValueError si deseas forzar que un cierto valor esté dentro de un rango específico:
def validate_age(age):
if age < 0 or age > 150:
raise ValueError("Invalid age: Age must be between 0 and 150")
try:
validate_age(-5)
except ValueError as ve:
print(ve)
En este ejemplo, la función validate_age verifica si la edad dada está dentro del rango válido (0 a 150). Si no lo está, se provoca una excepción ValueError con un mensaje de error personalizado. Luego usamos un bloque try-except para llamar a la función y manejar la excepción si ocurre.
Cuando provocas una excepción en tu código, esencialmente estás indicando que algo ha salido mal y que el flujo normal de tu programa no puede continuar. Esto significa que el control se transfiere al bloque try-except más cercano, que es un bloque de código diseñado para manejar excepciones de una manera específica. Si no hay tal bloque, el programa finalizará y se mostrará el mensaje de error.
Pero, ¿por qué es tan importante provocar excepciones en primer lugar? Bueno, hacerlo realmente puede ayudarte a crear código más robusto y resistente a errores. Al detectar y manejar errores al principio del código, puedes evitar que causen un comportamiento inesperado o incluso que bloqueen tu programa por completo. Esto puede ahorrarte tiempo y frustración a largo plazo, así como hacer que tu código sea más confiable y fácil de mantener.
Ejercicio 9.3.1: Provocando excepciones para entrada inválida
Título: Validar entrada de usuario
Descripción: Escriba una función llamada validate_input
que tome una cadena como entrada y provoque una excepción ValueError
si la cadena de entrada contiene algún carácter especial (por ejemplo, !, @, #, etc.).
Instrucciones:
- Cree una función
validate_input
que tome una cadenainput_str
. - Verifique si la cadena de entrada contiene caracteres especiales.
- Si los contiene, provoque una
ValueError
con un mensaje de error personalizado. - Pruebe la función con entradas válidas e inválidas usando un bloque try-except.
Solución:
import string
def validate_input(input_str):
if any(char in string.punctuation for char in input_str):
raise ValueError("Invalid input: The input should not contain special characters")
try:
validate_input("HelloWorld!")
except ValueError as ve:
print(ve)
try:
validate_input("HelloWorld")
except ValueError as ve:
print(ve)
Salida:
Invalid input: The input should not contain special characters
Ejercicio 9.3.2: Provocando excepciones para contraseñas inválidas
Título: Verificador de robustez de contraseñas
Descripción: Cree una función llamada validate_password
que verifique si una contraseña dada es robusta. Una contraseña robusta se define como aquella que tiene al menos 8 caracteres, contiene al menos una letra mayúscula, una letra minúscula, un dígito y un carácter especial. Provoque una excepción ValueError
si la contraseña no cumple con estos criterios.
Instrucciones:
- Cree una función
validate_password
que tome una cadenapassword
. - Verifique si la contraseña cumple con los criterios de una contraseña robusta.
- Si no los cumple, provoque una
ValueError
con un mensaje de error personalizado. - Pruebe la función con contraseñas válidas e inválidas usando un bloque try-except.
Solución:
import string
def validate_password(password):
if len(password) < 8:
raise ValueError("Invalid password: Password must have at least 8 characters")
if not any(char.isupper() for char in password):
raise ValueError("Invalid password: Password must have at least one uppercase letter")
if not any(char.islower() for char in password):
raise ValueError("Invalid password: Password must have at least one lowercase letter")
if not any(char.isdigit() for char in password):
raise ValueError("Invalid password: Password must have at least one digit")
if not any(char in string.punctuation for char in password):
raise ValueError("Invalid password: Password must have at least one special character")
try:
validate_password("WeakPwd1")
except ValueError as ve:
print(ve)
try:
validate_password("StrongPwd1!")
except ValueError as ve:
print(ve)
Salida:
Invalid password: Password must have at least one special character
Ejercicio 9.3.3: Provocando excepciones para direcciones de correo electrónico inválidas
Título: Validador de correo electrónico
Descripción: Cree una función llamada validate_email
que verifique si una dirección de correo electrónico dada es válida. Una dirección de correo electrónico válida debe tener el siguiente formato: <nombre de usuario>@<dominio>.<tld>
. Provoque una excepción ValueError
si la dirección de correo electrónico no cumple con estos criterios.
Instrucciones:
- Cree una función
validate_email
que tome una cadenaemail
. - Verifique si la dirección de correo electrónico es válida.
- Si no lo es, provoque una
ValueError
con un mensaje de error personalizado. - Pruebe la función con direcciones de correo electrónico válidas e inválidas usando un bloque try-except.
Solución:
import re
def validate_email(email):
email_regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if not re.match(email_regex, email):
raise ValueError("Invalid email address")
try:
validate_email("invalid_email.com")
except ValueError as ve:
print(ve)
try:
validate_email("valid.email@example.com")
except ValueError as ve:
print(ve)
Salida:
Invalid email address
9.3: Provocando Excepciones
En Python, las excepciones son eventos que pueden ocurrir cuando hay un error o una condición excepcional durante la ejecución de un programa. Estos pueden ser causados por una variedad de factores, como la entrada incorrecta o un evento inesperado. Como hemos visto antes, Python provoca excepciones automáticamente cuando encuentra un error. Sin embargo, también puedes provocar excepciones manualmente en tu código usando la instrucción raise. Esto es particularmente útil cuando quieres imponer ciertas condiciones o restricciones en tu programa, como verificar la entrada válida o asegurarte de que ciertos recursos estén disponibles antes de ejecutar un fragmento de código.
Para provocar una excepción, puedes usar la palabra clave raise seguida de la clase de excepción o una instancia de la clase de excepción que deseas provocar. Esto puede ser útil para proporcionar contexto adicional para el error, como especificar el tipo de error que ocurrió o proporcionar un mensaje personalizado al usuario. Al provocar excepciones en tu código, puedes mejorar su solidez y hacerlo más confiable, asegurando que pueda manejar una amplia gama de entradas y condiciones.
Aquí está la sintaxis básica para provocar una excepción:
raise ExceptionClass("Error message")
Por ejemplo, puedes provocar una excepción ValueError si deseas forzar que un cierto valor esté dentro de un rango específico:
def validate_age(age):
if age < 0 or age > 150:
raise ValueError("Invalid age: Age must be between 0 and 150")
try:
validate_age(-5)
except ValueError as ve:
print(ve)
En este ejemplo, la función validate_age verifica si la edad dada está dentro del rango válido (0 a 150). Si no lo está, se provoca una excepción ValueError con un mensaje de error personalizado. Luego usamos un bloque try-except para llamar a la función y manejar la excepción si ocurre.
Cuando provocas una excepción en tu código, esencialmente estás indicando que algo ha salido mal y que el flujo normal de tu programa no puede continuar. Esto significa que el control se transfiere al bloque try-except más cercano, que es un bloque de código diseñado para manejar excepciones de una manera específica. Si no hay tal bloque, el programa finalizará y se mostrará el mensaje de error.
Pero, ¿por qué es tan importante provocar excepciones en primer lugar? Bueno, hacerlo realmente puede ayudarte a crear código más robusto y resistente a errores. Al detectar y manejar errores al principio del código, puedes evitar que causen un comportamiento inesperado o incluso que bloqueen tu programa por completo. Esto puede ahorrarte tiempo y frustración a largo plazo, así como hacer que tu código sea más confiable y fácil de mantener.
Ejercicio 9.3.1: Provocando excepciones para entrada inválida
Título: Validar entrada de usuario
Descripción: Escriba una función llamada validate_input
que tome una cadena como entrada y provoque una excepción ValueError
si la cadena de entrada contiene algún carácter especial (por ejemplo, !, @, #, etc.).
Instrucciones:
- Cree una función
validate_input
que tome una cadenainput_str
. - Verifique si la cadena de entrada contiene caracteres especiales.
- Si los contiene, provoque una
ValueError
con un mensaje de error personalizado. - Pruebe la función con entradas válidas e inválidas usando un bloque try-except.
Solución:
import string
def validate_input(input_str):
if any(char in string.punctuation for char in input_str):
raise ValueError("Invalid input: The input should not contain special characters")
try:
validate_input("HelloWorld!")
except ValueError as ve:
print(ve)
try:
validate_input("HelloWorld")
except ValueError as ve:
print(ve)
Salida:
Invalid input: The input should not contain special characters
Ejercicio 9.3.2: Provocando excepciones para contraseñas inválidas
Título: Verificador de robustez de contraseñas
Descripción: Cree una función llamada validate_password
que verifique si una contraseña dada es robusta. Una contraseña robusta se define como aquella que tiene al menos 8 caracteres, contiene al menos una letra mayúscula, una letra minúscula, un dígito y un carácter especial. Provoque una excepción ValueError
si la contraseña no cumple con estos criterios.
Instrucciones:
- Cree una función
validate_password
que tome una cadenapassword
. - Verifique si la contraseña cumple con los criterios de una contraseña robusta.
- Si no los cumple, provoque una
ValueError
con un mensaje de error personalizado. - Pruebe la función con contraseñas válidas e inválidas usando un bloque try-except.
Solución:
import string
def validate_password(password):
if len(password) < 8:
raise ValueError("Invalid password: Password must have at least 8 characters")
if not any(char.isupper() for char in password):
raise ValueError("Invalid password: Password must have at least one uppercase letter")
if not any(char.islower() for char in password):
raise ValueError("Invalid password: Password must have at least one lowercase letter")
if not any(char.isdigit() for char in password):
raise ValueError("Invalid password: Password must have at least one digit")
if not any(char in string.punctuation for char in password):
raise ValueError("Invalid password: Password must have at least one special character")
try:
validate_password("WeakPwd1")
except ValueError as ve:
print(ve)
try:
validate_password("StrongPwd1!")
except ValueError as ve:
print(ve)
Salida:
Invalid password: Password must have at least one special character
Ejercicio 9.3.3: Provocando excepciones para direcciones de correo electrónico inválidas
Título: Validador de correo electrónico
Descripción: Cree una función llamada validate_email
que verifique si una dirección de correo electrónico dada es válida. Una dirección de correo electrónico válida debe tener el siguiente formato: <nombre de usuario>@<dominio>.<tld>
. Provoque una excepción ValueError
si la dirección de correo electrónico no cumple con estos criterios.
Instrucciones:
- Cree una función
validate_email
que tome una cadenaemail
. - Verifique si la dirección de correo electrónico es válida.
- Si no lo es, provoque una
ValueError
con un mensaje de error personalizado. - Pruebe la función con direcciones de correo electrónico válidas e inválidas usando un bloque try-except.
Solución:
import re
def validate_email(email):
email_regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if not re.match(email_regex, email):
raise ValueError("Invalid email address")
try:
validate_email("invalid_email.com")
except ValueError as ve:
print(ve)
try:
validate_email("valid.email@example.com")
except ValueError as ve:
print(ve)
Salida:
Invalid email address