Objetivo: mostrar cómo recorrer una dirección de correo carácter a carácter, detener el recorrido al encontrar @ (con break) y obtener —en una sola línea de salida— la parte antes de la arroba. Luego aplicar el mismo patrón a un parámetro de Revit.
Ejemplo Python
Explicación línea por línea
email = «maria.perez@ejemplo.org»
Definimos la cadena que contiene la dirección de correo. Esta es la secuencia de caracteres que vamos a recorrer.
local = «»
Inicializamos una variable local como cadena vacía. La usaremos para acumular los caracteres que están antes de la @.
for caracter in email:
Iniciamos un bucle for que itera carácter a carácter sobre la cadena email. En cada vuelta la variable caracter toma el siguiente carácter de la cadena.
if caracter == «@»:
Comprobamos si el carácter actual es exactamente la arroba @. Esta es la condición para detener la recolección.
break
Si la condición se cumple, break interrumpe el bucle inmediatamente y la ejecución continúa en la siguiente línea fuera del for. No se procesan más caracteres.
local += caracter
Si no hemos encontrado la @, concatenamos el carácter actual al final de la cadena local. Así vamos construyendo la parte inicial del correo.
print(local)
Una vez terminado el bucle (por haber llegado a la @ o por haber recorrido toda la cadena), imprimimos la parte acumulada en local. Si la @ estaba presente, es la parte antes de la arroba. Si no había @, imprimirá la cadena completa.
Comportamiento / casos especiales
Si email = «@dominio.com» → local queda «» (cadena vacía).
Si no hay @ en la cadena → el for termina naturalmente y local contendrá toda la dirección.
Alternativa más compacta (muy pythonic): local = email.split(«@», 1)[0].
Aplicación práctica en Revit (pseudocódigo)
Imagina que en tu modelo Revit cada elemento tiene un parámetro OwnerEmail y quieres extraer la parte local (antes de @) para copiarla al parámetro OwnerName del elemento. En Revit hay que leer parámetros y, si vas a escribir en el documento, hacerlo dentro de una Transaction. A continuación un ejemplo ilustrativo (pseudocódigo) que utiliza el mismo patrón for + break.
Explicación línea por línea (Revit)
elementos = obtener_elementos_revit()
Obtenemos la colección de elementos del modelo que queremos procesar (puede venir de un FilteredElementCollector o función wrapper). elementos es iterable.
for elem in elementos:
Recorremos cada elemento del conjunto.
param_email = elem.LookupParameter(«OwnerEmail»)
Intentamos recuperar el parámetro llamado «OwnerEmail» del elemento. Si el parámetro no existe, LookupParameter devuelve None (según la API).
if not param_email:
Si no hay tal parámetro, usamos continue para pasar al siguiente elemento (no hay email que procesar).
email = param_email.AsString() or «»
Leemos el valor del parámetro como cadena (método típico en la API de Revit). Si es None, lo convertimos en cadena vacía para evitar errores.
local = «»
Inicializamos la variable local donde acumularemos la parte antes de @.
for ch in email:
Iteramos carácter a carácter la cadena del email.
if ch == «@»:
Detectamos la arroba.
break
Si encontramos @, interrumpimos el bucle interno; ya no necesitamos procesar más caracteres.
local += ch
Si no es @, concatenamos el carácter a local.
if not local:
Si, tras el bucle, local está vacío (p. ej. email vacío o empieza por @), no escribimos nada y saltamos.
t = Transaction(doc, «Asignar OwnerName»)
Abrimos una transacción para agrupar cambios en el documento Revit (necesario al escribir).
t.Start()
Iniciamos la transacción.
try: … t.Commit() / t.RollBack()
Intentamos escribir el valor en el parámetro OwnerName. Si hay error hacemos Rollback, si todo va bien hacemos Commit. Esto garantiza que no dejamos el documento en estado inconsistente.
param_owner = elem.LookupParameter(«OwnerName»)
Recuperamos el parámetro destino.
if param_owner and not param_owner.IsReadOnly:
Comprobamos que existe y que no está en solo lectura antes de asignarle el valor.
param_owner.Set(local)
Escribimos la parte local (antes de @) en el parámetro OwnerName.
Notas y buenas prácticas
- Por qué usar for + break aquí: el patrón es explícito y útil cuando quieres procesar un flujo de caracteres y detenerte ante un delimitador. Sirve bien en casos donde no quieras o no puedas usar métodos de cadena (por ejemplo, por razones didácticas o por procesamiento especial carácter a carácter).
- Alternativa más corta (Pythonic): local = email.split(«@», 1)[0] — obtiene lo mismo en una línea; en Revit, si no hay @, devuelve la cadena completa.
- Validaciones en Revit: siempre valida parámetros, maneja None, y escribe dentro de transacciones. Además, evita abrir y cerrar una transacción por cada elemento si vas a procesar muchos: agrútalos por lotes para mejorar rendimiento.
- Casos límite: si el email es «@dominio.com» la parte local será «» — decide cómo quieres manejarlo (saltar, avisar, marcar error).
El ejemplo Python muestra claramente cómo recorrer y detenerse con break.
El patrón se traslada a Revit para extraer y copiar información desde parámetros de elemento, con la diferencia práctica de que en Revit hay que gestionar la escritura mediante transacciones y validar los parámetros.
Bonus 1: break vs continue en Python
En el artículo vimos cómo usar break para detener un bucle cuando encontramos un carácter específico (@).
Pero existe otra instrucción parecida: continue.
break → sale completamente del bucle.
continue → salta la iteración actual y continúa con la siguiente.
Ejemplo práctico
Salida:
abcd
Aquí no se rompe el bucle; simplemente se ignora el carácter @ y se siguen imprimiendo los demás.
En Revit (idea rápida)
Con break → dejarías de procesar un parámetro al encontrar un delimitador (como @).
Con continue → simplemente saltarías ese carácter (o parámetro vacío) y seguirías procesando el resto.
Bonus 2: Crear y guardar un archivo Python
Cuando escribes programas en Python, no siempre lo haces en la consola interactiva (Shell window). Generalmente trabajas en un editor donde puedes escribir, guardar y volver a abrir tu código.
Pasos básicos:
-
Abrir el editor
-
Puede ser el editor integrado en IDLE o uno más avanzado como VS Code, PyCharm o incluso un bloc de notas.
-
Aquí escribes tu programa completo (no solo una línea como en la Shell).
-
-
Escribir el código
3. Guardar el archivo
-
Selecciona File → Save As…
-
Escribe un nombre.
-
La extensión
.pyes obligatoria para que Python lo reconozca como un script. -
Diferencia Editor vs. Shell
-
Editor Window → donde escribes y guardas archivos
.py. -
Shell Window (consola interactiva) → donde ejecutas instrucciones sueltas, pruebas rápidas o ves la salida de tus programas.
-
-
4. El sistema operativo y los .py
-
Cuando haces doble clic en un archivo
.py, tu sistema operativo (Windows, Mac, Linux) sabe que debe abrirlo con el intérprete de Python. -
Esto es gracias a la extensión
.py, que actúa como «puente» entre tu archivo y Python.
En resumen:
-
La editor window es para escribir y guardar programas.
-
La shell window es para probar y ejecutar código al instante.
-
Los archivos
.pyson el formato estándar de scripts de Python y cualquier OS sabe cómo abrirlos con el intérprete instalado.
Contenido Web de Yolanda Muriel está sujeto bajo Licencia Creative Commons Atribución-NoComercial-SinDerivadas 3.0 Unported.



