Когда атрибут `isatty ()` отсутствует в sys.stderr? - PullRequest
0 голосов
/ 06 июня 2018

Иногда этот атрибут отсутствует.(Например, это или это ) Когда это происходит?Есть ли способ обойти это?Могу ли я просто как-то принудительно добавить этот атрибут, чтобы все заработало?

1 Ответ

0 голосов
/ 07 июня 2018

Я предполагаю, что это происходит только тогда, когда sys.stderr является ложным или исправленным обезьяной.

Например, первая проблема GitHub , на которую вы ссылаетесь, имеет следующее сообщение об ошибке:

AttributeError: 'UnicodeStdout' object has no attribute 'isatty'

Этот класс, UnicodeStdout, отсутствует в стандартной библиотеке, и мои исследования указывают мне на старую версию hachoir lib (например, this commit ).

Вторая ссылка содержит еще одно подозрительное сообщение об ошибке, где имя только одного класса указывает на то, что sys.stdout было перепутано с:

AttributeError: '_StdoutProxy' object has no attribute 'isatty'

Этот класс выглядит как "прокси", который не реализует все методы оригинального sys.stdout.Это повлияет не только на isatty(), но и на другие атрибуты, такие как fileno (см., Например, эту другую проблему .)

Вы можете обезопасить атрибут самостоятельно:

sys.stderr = SomeProxyClass()

или добавьте чек, например:

if hasattr(sys.stderr, 'isatty') and sys.stderr.isatty()

, но в большинстве случаев это не требуется.

...