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')
我正在使用 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')