Форум сайта python.su
Пытаюсь написать простой логгер исключений.
Есть скрипт:
import sys class ErrorStream: def write(self, arg): print(arg) sys.stderr = ErrorStream() a = 1/0
Traceback (most recent call last): File "D:\Coding\Python\Programs\Tests\test.py", line 1, in <module> a = 1/0 ZeroDivisionError: division by zero
Traceback (most recent call last): - File "D:\Coding\Python\Programs\Tests\test.py", line 8, in <module> - - a = 1/0 - - ZeroDivisionError : division by zero - -
Офлайн
import sys class ErrorStream: def write(self, arg, **kawrgs): print("Args=", arg) sys.stderr = ErrorStream() a = 1/0
Args= Traceback (most recent call last): Args= File "/Users/asmirnov/PycharmProjects/test/test.py", line 6, in <module> Args= Args= a = 1/0 Args= Args= ZeroDivisionError Args= : Args= division by zero Args=
Офлайн
Так и есть. Я тоже это делал, но это не решает проблему.
Офлайн
>>> import sys >>> class ErrorStream: ... def write(self, arg): ... print(arg, end='') ... >>> 1/0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: division by zero >>>
Офлайн
PodarokА какая проблема то? Тот факт, что ваши ожидания не соответствуют реализации чужого метода, это не проблема, это ваше непонимание чужого метода. Из этих строк без проблем можно собрать любой формат вывода, какой хотите.
Так и есть. Я тоже это делал, но это не решает проблему.
Офлайн
FishHookВот проблема:
А какая проблема то?
PodarokА по поводу
как реализовать ожидаемое поведение
FishHookСобрать-то, конечно, можно, но я думал, что есть более элегантное решение.
без проблем можно собрать любой формат вывода
Офлайн
JOHN_16
У вас либо ошибка в коде, либо вы не весь код показываете, потому что ни модуль ни класс нигде не используются.
Скорее всего вы пропустили sys.stderr = ErrorStream().
JOHN_16Почти. Нужно то же самое, только чтобы до и после исключения вставлялась пустая строка.
Вы этого хотите?
Офлайн
Podarok
Добавьте еще по принту пустой строки до и после основного принта и будет что вы хотите
Офлайн
JOHN_16
Если бы все было так просто, я бы сюда не писал)
Этот код
import sys class ErrorStream: def write(self, arg): print("\n", end="") print(arg, end="") print("\n", end="") sys.stderr = ErrorStream() a = 1/0
- Traceback (most recent call last): - - File "D:\Coding\Python\Programs\Tests\test.py", line 11, in <module> - - - - a = 1/0 - - - - ZeroDivisionError - : - division by zero - - -
Офлайн
Podarok
А зачем это нужно?
Офлайн