Tutoriais

Como Imprimir no stderr em Python

Ana Maria Gomes 17 jun Intermediário 5xp
Compartilhar

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.

Cursos gratuitos para continuar aprendendo

Curso
Grátis · 2h 13min

Aprenda sobre variáveis, loops e funções e crie seu primeiro projeto Python em apenas 2 horas!

Curso
Grátis · 3h 47min

Saia do zero e analise dados com Python e Pandas neste curso gratuito com certificado!

Curso
Grátis · 4h 11min

Aprenda a programar com Python e explore a inteligência artificial! Crie um chatbot prático que interage com seus próprios dados. Comece agora!

Ver todos os cursos

0 comentários

Exclusivo PRO
Faça parte da discussão

Comente e participe da conversa

Crie sua conta gratuita e compartilhe sua opinião nos comentários.

Entre para a Asimov