Python 在 Windows 10 上使用日志记录和设置语言环境时崩溃

Python crashing when using logging and setting locale on Windows 10

我正在使用 this answer 中的方法来记录文件并使用 UTF-8 控制台而不是 Windows(在我的例子中是 cp1250)和我的 [=19] 上的系统编码=] 进程崩溃(原文如此!)在下面的最后一行:

Process finished with exit code -1073740940 (0xC0000374)

我是 运行 Windows 10(版本:10.0.18362.1171)和 Python 3.8.6 (x64)。

import logging
import locale

log = logging.getLogger(self.dict_letters)
log.setLevel(logging.DEBUG)

console_log = logging.StreamHandler()  # create console handler and set level to debug
console_log.setLevel(LOGGING_LEVEL_CONSOLE)
console_log.setFormatter(logging.Formatter('%(levelname)s - %(message)s'))
log.addHandler(console_log)

file_log = logging.FileHandler('logfile.log'), 'w', 'utf-8')
file_log.setFormatter(logging.Formatter('%(asctime)s | %(levelname)s | %(message)s'))
file_log.setLevel(LOGGING_LEVEL_FILE)
log.addHandler(file_log)

# ensure logging works for Unicode (as per: 
if locale.getpreferredencoding().upper() != 'UTF-8':
    locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')

经过多次不同的实验后,我意识到在 Windows 10 上最近的更新(2020 年 8 月之后的更新)设置语言环境可能很危险,并且可能导致异常(0xc0000374)Python x64 版本:3.8.2、3.9、3.8.6、3.7.1(以及可能的其他)系统编码设置为 cp1250(以及可能的其他)。

即使以前它是良性的,目前它也会导致 python 进程崩溃。

删除以下行不会导致 Windows 上出现任何输出问题(控制台和日志文件均为 UTF-8):

if locale.getpreferredencoding().upper() != 'UTF-8':
    locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')