Python sys.stderr中何时不存在属性'isatty()'?

Python sys.stderr中何时不存在属性'isatty()'?,python,python-3.x,dynamic,attributes,Python,Python 3.x,Dynamic,Attributes,有时这个属性是不存在的。(例如,或) 这是什么时候发生的?有办法解决这个问题吗?我是否可以强制添加此属性以使其运行?我的猜测是,只有当模拟或修补了sys.stderr时才会发生这种情况 例如,您引用的具有以下错误消息: AttributeError: 'UnicodeStdout' object has no attribute 'isatty' 这个类,UnicodeStdout,不在标准库中,我的研究表明我使用了旧版本的库(例如) 有另一条可疑的错误消息,其中仅类的名称就表明sys.std

有时这个属性是不存在的。(例如,或)
这是什么时候发生的?有办法解决这个问题吗?我是否可以强制添加此属性以使其运行?

我的猜测是,只有当模拟或修补了
sys.stderr
时才会发生这种情况

例如,您引用的具有以下错误消息:

AttributeError: 'UnicodeStdout' object has no attribute 'isatty'
这个类,
UnicodeStdout
,不在标准库中,我的研究表明我使用了旧版本的库(例如)

有另一条可疑的错误消息,其中仅类的名称就表明
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()

但在大多数情况下,它应该是不必要的。

我如何使用猴子修补它?@HappyFace添加了一个如何使用猴子修补它的示例。在这种情况下,您需要在
SomeProxyClass
中实现所需的检查,然后可能会将实际调用委托给
stderr