Saltar a contenido

6.Excepciones, Cadenas y Métodos de Listas

Caracteres y Cadenas

Las computadoras almacenan caracteres como números. Hay más de una forma posible de codificar caracteres, pero solo algunas de ellas ganaron popularidad en todo el mundo y se usan comúnmente en TI: estas son ASCII (se emplea principalmente para codificar el alfabeto latino y algunos de sus derivados) y UNICODE (capaz de codificar prácticamente todos los alfabetos que utilizan los seres humanos).

Un número correspondiente a un carácter en particular se llama punto de código.

UNICODE utiliza diferentes formas de codificación cuando se trata de almacenar los caracteres usando archivos o memoria de computadora: dos de ellas son UCS-4 y UTF-8 (esta última es la más común ya que desperdicia menos espacio de memoria).

Las cadenas de Python son secuencias inmutables y se pueden indexar, dividir en rebanadas e iterar como cualquier otra secuencia, además de estar sujetas a los operadores in y not in. Existen dos tipos de cadenas en Python:

  • Cadenas de una línea
  • Cadenas multilinea
'cadena'

"""
cadena
"""

La longitud de una cadena está determinada por la función len().

El carácter de escape () no es contado

Las cadenas pueden ser concatenadas usando el operador +, y replicadas usando el operador *.

asterisk = '*'
plus = "+"
decoration = (asterisk + plus) * 4 + asterisk
print(decoration)

El par de funciones chr() y ord() se pueden utilizar para crear un carácter utilizando su punto de código y para determinar un punto de código correspondiente a un carácter. Las dos expresiones siguientes son siempre verdaderas:

chr(ord(character)) == character
ord(chr(codepoint)) == codepoint

Algunas otras funciones que se pueden aplicar a cadenas son:

list() → crea una lista que consta de todos los caracteres de la cadena.

max() → encuentra el carácter con el punto de código máximo.

min() → encuentra el carácter con el punto de código mínimo.

El método llamado index() encuentra el índice de una subcadena dada dentro de la cadena.

Puntos Clave Cadenas

  1. Algunos de los métodos que ofrecen las cadenas son:

    capitalize(): cambia todas las letras de la cadena a mayúsculas.

    center(): centra la cadena dentro de una longitud conocida.

    count(): cuenta las ocurrencias de un carácter dado.

    join(): une todos los elementos de una tupla/lista en una cadena.

    lower(): convierte todas las letras de la cadena en minúsculas.

    lstrip(): elimina los caracteres en blanco al principio de la cadena.

    replace(): reemplaza una subcadena dada con otra.

    rfind(): encuentra una subcadena comenzando por el final de la cadena.

    rstrip(): elimina los caracteres en blanco al final de la cadena.

    split(): divide la cadena en una subcadena usando un delimitador dado.

    strip(): elimina los espacios en blanco iniciales y finales.

    swapcase(): intercambia las mayúsculas y minúsculas de las letras.

    title(): hace que la primera letra de cada palabra sea mayúscula.

    upper(): convierte todas las letras de la cadena en letras mayúsculas.

  2. El contenido de las cadenas se puede determinar mediante los siguientes métodos (todos devuelven valores booleanos):

    endswith(): ¿La cadena termina con una subcadena determinada?

    isalnum(): ¿La cadena consta solo de letras y dígitos?

    isalpha(): ¿La cadena consta solo de letras?

    islower(): ¿La cadena consta solo de letras minúsculas?

    isspace(): ¿La cadena consta solo de espacios en blanco?

    isupper(): ¿La cadena consta solo de letras mayúsculas?

    startswith(): ¿La cadena consta solo de letras mayúsculas?

  3. Las cadenas se pueden comparar con otras cadenas utilizando operadores de comparación generales, pero compararlas con números no da un resultado razonable, porque ninguna cadena puede ser igual a ningún otro número. Por ejemplo:

    cadena == número es siempre False (falso). cadena != número es siempre True (verdadero). cadena >= número siempre genera una excepción.

  4. El ordenamiento de listas de cadenas se puede realizar mediante:

    • función sorted(), crea una nueva, lista ordenada.
    • método sort(), el cual ordena la lista en el momento.
  5. Un número se puede convertir en una cadena empleando la función str().

  6. Una cadena se puede convertir en un número (aunque no todas las cadenas) empleando ya sea la función int() o float(). La conversión falla si la cadena no contiene un número válido (se genera una excepción en dicho caso).

Cifrado Cesar

# Cifrado César - Cifrar un mensaje.
text = input("Ingresa tu mensaje: ")
cipher = ''
for char in text:
    if not char.isalpha():
        continue
    char = char.upper()
    code = ord(char) + 1
    if code > ord('Z'):
        code = ord('A')
    cipher += chr(code)

print(cipher)
# Cifrado César - descifrar un mensaje.
cipher = input('Ingresa tu criptograma: ')
text = ''
for char in cipher:
    if not char.isalpha():
        continue
    char = char.upper()
    code = ord(char) - 1
    if code < ord('A'):
        code = ord('Z')
    text += chr(code)

print(text)

Validación IBAN

# Validador IBAN.

iban = input("Ingresa un IBAN, por favor: ")
iban = iban.replace(' ','')

if not iban.isalnum():
    print("Has introducido caracteres no válidos.")
elif len(iban) < 15:
    print("El IBAN ingresado es demasiado corto.")
elif len(iban) > 31:
    print("El IBAN ingresado es demasiado largo.")
else:
    iban = (iban[4:] + iban[0:4]).upper()
    iban2 = ''
    for ch in iban:
        if ch.isdigit():
            iban2 += ch
        else:
            iban2 += str(10 + ord(ch) - ord('A'))
    iban = int(iban2)
    if iban % 97 == 1:
        print("El IBAN ingresado es válido.")
    else:
        print("El IBAN ingresado no es válido.")

Excepciones

Cada vez que tu código intenta hacer algo erróneo, irresponsable o inaplicable, Python hace dos cosas:

  1. Detiene tu programa.
  2. Crea un tipo especial de dato, llamado excepción.

Una excepción es un evento durante la ejecución del programa causado por una situación anormal. La excepción debe manejarse para evitar la terminación del programa. La parte del código que se sospecha que es la fuente de la excepción debe colocarse dentro del bloque try.

# El código que siempre corre suavemente.
:
try:
    :
    # Código arriesgado.
    :
except:
    :
    # La gestión de la crisis se lleva a cabo aquí.
    :
:
# De vuelta a la normalidad.
:

Si necesitas manejar más de una excepción proveniente del mismo bloque try, puedes agregar más de un bloque except, pero debes etiquetarlos con diferentes nombres, así:

:
# El código que siempre corre suavemente.
:
try:
    :
    # Código arriesgado.
    :
except Except_1:
    # La gestión de la crisis se lleva a cabo aquí.
except Except_2:
    # Salvamos el mundo aqui.
:
# De vuelta a la normalidad.
:

En el mejor caso, se ejecuta uno de los bloques except; ninguno de los bloques se ejecuta cuando la excepción generada no coincide con ninguna de las excepciones especificadas.

No se puede agregar más de un bloque de excepción sin nombre después de los bloques con nombre.

:
# El código que siempre corre suavemente.
:
try:
    :
    # Código arriesgado.
    :
except Except_1:
    # La gestión de la crisis se lleva a cabo aquí.
except Except_2:
    # Salvamos el mundo aqui.
except:
    # Todos los demás problemas caen aquí.
:
# De vuelta a la normalidad.
:

Python 3 define 63 excepciones integradas, y todas ellas forman una jerarquía en forma de árbol, cuya raíz se encuentra en la parte superior.

  • ZeroDivisionError es un caso especial de una clase de excepción más general llamada ArithmeticError.
  • ArithmeticError es un caso especial de una clase de excepción más general llamada solo Exception.
  • Exception es un caso especial de una clase más general llamada BaseException.

BaseException ↑ Exception ↑ ArithmeticError ↑ ZeroDivisionError

BaseException

Ubicación: BaseException

Descripción: la excepción más general (abstracta) de todas las excepciones de Python: todas las demás excepciones se incluyen en esta; se puede decir que las siguientes dos excepciones son equivalentes: except: y except BaseException:.

Otras excepciones

Algunas excepciones integradas abstractas de Python son:

  • ArithmeticError.
  • BaseException.
  • LookupError.

Algunas excepciones integradas concretas de Python son:

  • AssertionError.
  • ImportError.
  • IndexError.
  • KeyboardInterrupt.
  • KeyError.
  • MemoryError.
  • OverflowError.

Raise

La instrucción raise genera la excepción especificada denominada exc como si fuese generada de manera natural:

raise exc

Nota:

raise es una palabra clave reservada.

def bad_fun(n):
    raise ZeroDivisionError


try:
    bad_fun(0)
except ArithmeticError:
    print("¿Que pasó? ¿Un error?")

print("FIN.")
def bad_fun(n):
    try:
        return n / 0
    except:
        print("¡Lo hice otra vez!")
        # Nota la ausencia de excepción. Genera la misma que se maneja actualmente
        raise


try:
    bad_fun(0)
except ArithmeticError:
    print("¡Ya veo!")

print("FIN.")

Assert

Significa Afirmar.

  • Se evalúa la expresión.
  • Si la expresión se evalúa como True (Verdadera), o un valor numérico distinto de cero, o una cadena no vacía, o cualquier otro valor diferente de None, no hará nada más.
  • De lo contrario, automáticamente e inmediatamente se genera una excepción llamada AssertionError (en este caso, decimos que la afirmación ha fallado).
import math

x = float(input("Ingresa un número: "))
assert x >= 0.0

x = math.sqrt(x)

print(x)

Última actualización: 2022-10-30