Tamanho de fonte
Alto contraste
Altura de linha

Como Imprimir no stderr em Python

Avatar de Ana Maria Gomes Ana Maria Gomes
4 minutos de leitura 5 meses atrás

Ao programar em Python, você pode se deparar com situações em que precisa imprimir mensagens de erro no fluxo de erro padrão (stderr) em vez do fluxo de saída padrão (stdout). Isso é particularmente útil para registrar erros ou para depuração. Vamos explorar os diferentes métodos para imprimir no stderr em Python e entender qual você deve preferir.

Diferentes Métodos para Imprimir no stderr

Usando sys.stderr.write()

Um dos métodos mais diretos para escrever no stderr é usando o método stderr.write() do módulo sys:

import sys

sys.stderr.write("erro fatal\n")
Testar

Este método é explícito e deixa clara a sua intenção de escrever no stderr. Ele também é portátil entre Python 2 e Python 3, tornando-o uma boa escolha para código que precisa rodar em múltiplas versões do Python.

Usando a Função print() no Python 3

No Python 3, a função print() foi atualizada para permitir a impressão em diferentes fluxos com o argumento file:

import sys

print("erro fatal", file=sys.stderr)
Testar

Este método é simples e legível, e permite que você use a função print() familiar enquanto especifica que deseja que a saída vá para o stderr.

Usando print no Python 2

Para aqueles que ainda usam Python 2, a sintaxe para imprimir no stderr é um pouco diferente:

import sys

print >> sys.stderr, "erro fatal"

No entanto, essa sintaxe não é compatível com o Python 3, então é menos utilizada hoje em dia.

Criando uma Função eprint() Personalizada

Para economizar repetição e melhorar a legibilidade, você pode definir uma função personalizada que se comporta como print(), mas que por padrão escreve no stderr:

import sys

def eprint(*args, **kwargs):
    print(*args, file=sys.stderr, **kwargs)

# Uso:
eprint("Teste")
eprint("foo", "bar", "baz", sep="---")
Testar

Essa função personalizada, eprint(), pode ser usada da mesma forma que a função print() padrão, mas sempre escreverá no stderr.

Usando o Módulo logging

Outro método a considerar é usar o módulo logging integrado do Python, que é projetado para mensagens de erro e registro de atividades:

import logging

logging.basicConfig(format='%(message)s')
log = logging.getLogger(__name__)
log.warning('Eu imprimo no stderr por padrão')
Testar

Quando você executa um script que usa o módulo logging, mensagens registradas com um nível de severidade WARNING ou superior serão impressas no stderr por padrão.

Qual Método Você Deve Preferir?

Embora todos esses métodos possam escrever no stderr, o método sys.stderr.write() se destaca pela sua legibilidade e explicitação. Ele comunica claramente a sua intenção de escrever no stderr e é portátil entre as versões do Python.

No entanto, se você prefere a sintaxe e a flexibilidade da função print(), definir uma função eprint() personalizada é uma ótima maneira de manter a legibilidade e a facilidade de uso.

Para aplicações que exigem um registro de atividades robusto, o módulo logging é a escolha mais adequada, pois oferece uma solução abrangente para relatar erros e registrar mensagens.

Resumo

Em Python, você tem várias opções para imprimir no stderr, incluindo o uso de sys.stderr.write(), a função print() no Python 3, uma função eprint() personalizada ou o módulo logging. A escolha depende da sua preferência por legibilidade, portabilidade e das necessidades específicas da sua aplicação. Seja escrevendo scripts simples ou aplicações complexas, saber como imprimir no stderr é uma habilidade essencial para um tratamento eficaz de erros e depuração.

Imagem de um notebook

Cursos de programação gratuitos com certificado

Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:

  • Conteúdos gratuitos
  • Projetos práticos
  • Certificados
  • +20 mil alunos e comunidade exclusiva
  • Materiais didáticos e download de código
Inicie agora

Comentários

Comentar
Faça parte da discussão Crie sua conta gratuita e compartilhe
sua opinião nos comentários
Entre para a Asimov