Подтвердить что ты не робот

Почему open (True, 'w') печатает текст, например sys.stdout.write?

У меня есть следующий код:

with open(True, 'w') as f:
    f.write('Hello')

Почему этот код печатает текст Hello вместо повышения ошибки?

4b9b3361

Ответ 1

Из встроенной документации по функциям на open():

open(file, mode='r', buffering=-1...file является либо строковым, либо байтовым объектом, указывающим путь (абсолютный или относительный к текущему рабочему каталогу) файла, который будет открыт, или дескриптор целочисленного файла файла, который будет обернут

Этот "дескриптор целочисленного файла" далее описан в документации os:

Например, стандартным входом обычно является файловый дескриптор 0, стандартный вывод - 1, а стандартная ошибка - 2. Другие файлы, открытые процессом, будут затем назначены 3, 4, 5 и т.д.

Так как булевы являются подклассом int, False может быть взаимозаменяемым с 0 и True с 1. Поэтому открытие дескриптора файла True совпадает с открытием дескриптора файла 1, который выберет стандартный вывод.