簡體   English   中英

Python 在 Windows 上使用日志記錄和設置語言環境時崩潰 10

[英]Python crashing when using logging and setting locale on Windows 10

我正在使用這個答案中的一個方法來記錄到一個文件並在 UTF-8 中進行控制台,而不是在 Windows 中進行系統編碼(在我的例子中是 cp1250),我的 python 進程在下面的最后一行崩潰(原文如此:):

進程結束,退出代碼為 -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: https://stackoverflow.com/a/22320208/6573902)
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 出現任何 output 問題(控制台和日志文件均為 UTF-8):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM