Erros e resultados
Quando uma execução falha, o Waiso não entrega um paredão de texto. A aba de saída mostra um bloco de erro: o tipo do erro, a mensagem e a pilha como uma lista de frames — as suas linhas primeiro, os detalhes internos das bibliotecas recolhidos. Clique num frame para cair naquela linha; clique em Corrigir com IA para mandar o erro, o código e as entradas ao assistente. Quando uma execução dá certo com uma lista de registros, a mesma aba mostra isso como uma tabela que dá para buscar, ordenar e baixar.
- Ler o bloco de erro: tipo, mensagem e frames
- Pular de um frame para a linha que falhou
- Pedir ao assistente que corrija o erro com o contexto anexado
- Buscar, ordenar e exportar um resultado em lista como CSV
O que uma execução com falha conta
Toda execução com falha traz um erro estruturado, não só uma linha de texto. Ele diz que tipo de falha foi, o tipo do erro (ZeroDivisionError, RangeError, timeout…), a mensagem e — para um erro que o seu código levantou — os frames: arquivo, linha e função de cada passo da pilha, cada um marcado como seu código ou não. O mesmo registro é o que a página Execuções, quem chama a API e um passo de flow veem.
| Tipo de falha | O que aconteceu | Frames |
|---|---|---|
| Exceção | O seu código levantou ou lançou um erro (inclusive erro de sintaxe) | Sim, para Python e TypeScript/JavaScript |
| Entrada | Uma entrada foi recusada antes da execução (invalid_parameter) — veja Entradas do script | Não |
| Plataforma | Um tempo limite, um cancelamento, um worker perdido, um pacote que não instalou | Não |
Leia um erro e vá até ele
Execute este script com o padrão (uma lista vazia). O Python divide por zero; a versão TypeScript lança o próprio RangeError.
def average(values: list[float]) -> float:
return sum(values) / len(values)
def main(values: list[float] = []):
return {"average": average(values)}- Leia o título
O bloco abre com o tipo sobre a mensagem:
ZeroDivisionError— division by zero. Uma falha de plataforma mostra o código, comotimeout; a última linha do log diz isso em palavras (O script estourou o tempo limite). - Siga os seus frames
Embaixo, cada frame seu diz linha 2 em average, com aquela linha de código ao lado — a chamada mais funda por último. Clique num deles: o editor põe o cursor naquela linha e a centraliza. Frames do runtime, do SDK ou de pacotes instalados ficam recolhidos em Mostrar 3 frames internos; uma pilha muito funda mantém os primeiros e os últimos frames e recolhe o meio.
- Confira os logs
A aba Logs ainda tem tudo que o script imprimiu antes de falhar, com uma caixa de busca e um filtro de nível (Todos os níveis, Info, Aviso, Erro, Sistema).
Corrigir com IA
No rodapé do bloco de uma exceção, Corrigir com IA abre a aba Chat IA do editor com a mensagem Corrija o erro que esta execução gerou. já escrita e um chip ZeroDivisionError · código e entradas anexados. Nada é enviado até você clicar em Enviar — acrescente uma frase sua se souber qual deve ser a correção, ou tire o anexo no ×. O assistente responde com uma alteração proposta, que você revisa como código antes de ela mexer no rascunho; veja O chat de IA do editor.
O botão aparece para erros que o seu código levantou. Uma falha de plataforma (tempo limite, worker perdido) não tem nada no código para corrigir, então não tem botão; um pacote que não instalou oferece Declarar pacote ou Alterar versão, que abrem o painel Dependências com o pacote preenchido. Copiar erro copia o erro inteiro como texto.
def average(values: list[float]) -> float | None:
if not values:
return None
return sum(values) / len(values)
def main(values: list[float] = []):
return {"average": average(values)}Resultados como tabela
Uma execução bem-sucedida mostra o que main devolveu como JSON formatado. Quando o resultado é uma lista de registros — um array de objetos com até 50 chaves diferentes entre eles — ele abre como tabela: uma coluna por chave, uma caixa Buscar linhas que procura em qualquer célula, a contagem de linhas (2 de 3 linhas durante a busca), cabeçalhos que ordenam com um clique (crescente, decrescente, volta à ordem original) e um botão CSV que baixa as linhas. Os ícones ao lado alternam entre tabela e JSON, copiam o JSON, baixam como arquivo .json ou expandem o resultado para a tela toda.
def main(limit: int = 3):
products = [
{"sku": "A-100", "name": "Stapler", "sold": 42, "price": 12.5},
{"sku": "B-220", "name": "Pen", "sold": 130, "price": 2.0},
{"sku": "C-310", "name": "Backpack", "sold": 17, "price": 89.9},
{"sku": "D-404", "name": "Ruler", "sold": 64, "price": 3.4},
]
products.sort(key=lambda p: p["sold"], reverse=True)
return products[:limit]| # |
|---|
O que cada linguagem informa
- Python — a classe e a mensagem da exceção, frames do traceback; um erro de sintaxe aponta a linha e a coluna.
sys.exit()falha comoSystemExit. - TypeScript e JavaScript — o
namee amessagedo erro e os frames da pilha. Lance umError(não uma string solta) para manter os frames. - C e C++ — um código de saída diferente de zero ou uma queda faz a execução falhar com a última linha que o programa escreveu em
stderre o código de saída ou sinal (terminated by signal 11 (SIGSEGV)); não há frames. Um erro de compilação para a execução antes de ela começar, com a mensagem do gcc no texto do erro.
Códigos de plataforma que podem aparecer
| Código | Significado |
|---|---|
timeout | A execução passou do tempo limite (5 minutos, a menos que mudado em Configurações do script) |
cancelled | Alguém clicou em Parar |
worker_lost | O worker que rodava sumiu no meio |
worker_unavailable | Nenhum worker conseguiu iniciar (também um erro de compilação C/C++, ou um processo morto antes de responder) |
dependency_* | Um pacote Python não pôde ser instalado — veja Dependências |
Limites
- Uma pilha guarda no máximo 60 frames (os 20 primeiros e os 40 últimos); o texto do traceback guarda os últimos 64 KB.
- Frames clicáveis e Corrigir com IA ficam no editor. Na página Execuções o mesmo erro aparece só para leitura.
- Busca, ordenação e CSV funcionam numa lista de registros no primeiro nível; um objeto único pode virar uma tabela chave/valor, mas abre como JSON.