Ir al contenido

Diálogo de error

ui.error_dialog(info, on_close) muestra un error en un diálogo: su mensaje, dónde pasó, el archivo y la línea de donde viene y el traceback en un editor de solo lectura, donde se puede seleccionar y copiar cualquier parte. Sus botones copian el informe entero, van al origen (on_go_to, con el texto go_to_label), lo muestran entre los logs (on_logs) y cierran. more añade una línea que dice cuántos errores más llegaron después. info es un ui.ErrorInfo; muestra el diálogo con una Capa de diálogo.

ui.error_dialog · Categoría: Diálogos · Referencia completa →

Diálogo de errorDiálogo de error
  • Cuando algo que pidió el usuario falla (guardar, exportar, ejecutar un script) y los detalles importan.
  • Desde el botón Detalles de un Límite de errores.
  • Para un mensaje corto sin traceback, usa una Alerta con kind="error".
import pyzed as pz
from pyzed import ui
class Notes(pz.App):
def __init__(self):
self.error = None
def save(self):
try:
write_notes(self.notes)
except OSError as err:
self.error = ui.ErrorInfo.from_exception(err, where="Save")
def close_error(self):
self.error = None
def view(self):
dialog = ui.error_dialog(self.error, self.close_error) if self.error else None
return ui.dialog_layer(self.page(), dialog, on_dismiss=self.close_error)

Sin traceback el diálogo no muestra la caja de código, como con un ErrorInfo que construyes tú.

Diálogo de error: Solo cerrarDiálogo de error: Solo cerrar
Solo cerrar
Código
def average(values):
return sum(values) / len(values)
try:
average([])
except ZeroDivisionError as err:
info = ui.ErrorInfo.from_exception(err, where="Totals")
ui.error_dialog(info, on_close, width=480)
Diálogo de error: on_go_to=, go_to_label=Diálogo de error: on_go_to=, go_to_label=
on_go_to=, go_to_label=
Código
def average(values):
return sum(values) / len(values)
try:
average([])
except ZeroDivisionError as err:
info = ui.ErrorInfo.from_exception(err, where="Totals")
ui.error_dialog(info, on_close, on_go_to=on_go_to, go_to_label="Open app.py",
width=480)
Diálogo de error: on_logs=Diálogo de error: on_logs=
on_logs=
Código
def average(values):
return sum(values) / len(values)
try:
average([])
except ZeroDivisionError as err:
info = ui.ErrorInfo.from_exception(err, where="Totals")
ui.error_dialog(info, on_close, on_logs=on_logs, width=480)
Diálogo de error: more=2Diálogo de error: more=2
more=2
Código
def average(values):
return sum(values) / len(values)
try:
average([])
except ZeroDivisionError as err:
info = ui.ErrorInfo.from_exception(err, where="Totals")
ui.error_dialog(info, on_close, more=2, width=480)
Diálogo de error: title=Diálogo de error: title=
title=
Código
def average(values):
return sum(values) / len(values)
try:
average([])
except ZeroDivisionError as err:
info = ui.ErrorInfo.from_exception(err, where="Totals")
ui.error_dialog(info, on_close, title="The totals could not be computed", width=480)
Diálogo de error: Sin tracebackDiálogo de error: Sin traceback
Sin traceback
Código
info = ui.ErrorInfo("PermissionError", "[Errno 13] Permission denied: 'notes.md'", where="Save")
ui.error_dialog(info, on_close, width=480)

Diálogo de error tiene 3 eventos propios, en la tabla de abajo. Como todo widget, también tiene los 18 eventos comunes (click, double_click, right_click, mouse_enter, drag, key_down, resize…), que se conectan con .on(...): mira Eventos y Eventos de cada componente.

Evento El handler recibe Cuándo
on_close () Botón Cerrar y Escape.
on_go_to () Añade el botón de ir al origen (abre el archivo en la línea).
on_logs () Añade el botón Ver en Logs.

El handler recibe es lo que Pyzed le pasa a tu función: () es nada. Cualquier handler también puede ser un mensaje (un valor que no se puede llamar), que va a update().

Los mismos eventos escritos de tres formas. Imperativa: métodos de la app que cambian self. Declarativa: los handlers producen mensajes y un único update() decide. Funcional: una función pura dibuja un estado inmutable y pide cambios con set_state(...). Mira Imperativo, declarativo y funcional.

class Notes(pz.App):
def __init__(self):
try:
open("/no/such/file")
except OSError as err:
self.error = ui.ErrorInfo.from_exception(err, where="Open")
def close(self): # on_close: the button and Escape
self.error = None
def view(self):
dialog = ui.error_dialog(self.error, self.close,
on_go_to=lambda: print("go to", self.error.origin), # adds Go to
on_logs=lambda: print("show logs")) if self.error else None
return ui.dialog_layer(main_view(), dialog, on_dismiss=self.close)
error_dialog(
info,
on_close,
*,
title=None,
on_go_to=None,
go_to_label=None,
on_logs=None,
more=0,
width=680,
theme=None,
)

Un diálogo con un error: su mensaje, dónde pasó, el archivo y la línea de los que viene y el traceback en un editor de solo lectura (selecciona y copia cualquier parte), con botones para copiarlo todo, ir al origen, verlo en los logs y cerrar. Muéstralo con ui.dialog_layer o ui.layer.

Propiedad Por defecto Descripción
info obligatorio Un ui.ErrorInfo.
title None Título (“Algo salió mal”).
go_to_label None Su texto (“Ir al origen”).
more 0 Cuántos errores más llegaron después (una línea lo dice).
width 680 Ancho en píxeles o un tamaño de modal.
theme None Tema a usar.

Eventos: on_close, on_go_to, on_logs (eventos).

Referencia completa →