1
以下代碼非常簡單,但由於某些原因,for-loop不會遍歷記錄器的所有處理程序。但是,如果我們刪除else子句中的my_logger.removeHandler(處理程序),則for循環遍歷所有處理程序。任何想法,如果我做錯了什麼?Python 2.7.2不能正確迭代記錄器的處理程序
import logging
import sys
stdf = logging.Formatter("%(message)s")
filef = logging.Formatter("%(message)s")
my_logger = logging.getLogger("file std logger")
stdh = logging.StreamHandler(sys.stdout)
stdh.setFormatter(stdf)
my_logger.addHandler(stdh)
fileh = logging.FileHandler("run.log", mode = 'w', encoding = "utf-16-le", delay = True)
fileh.setLevel(logging.DEBUG)
fileh.setFormatter(filef)
my_logger.addHandler(fileh)
my_logger.info("wow1")
my_logger.info("test string1")
my_logger.info("wow2")
my_logger.info("test string2")
my_logger.info("wow3")
my_logger.info("test string3")
for handler in my_logger.handlers:
print(handler)
if handler.__class__.__name__ == "FileHandler":
handler.flush()
handler.close()
my_logger.removeHandler(handler)
else:
handler.flush()
my_logger.removeHandler(handler)
my_logger.handlers
我認爲迭代器在迭代器開始時迭代遍歷所有元素。這意味着說「Python的for-loop與C/C++相同」的教程是錯誤的......這意味着在迭代過程中修改列表是危險的。這與C/C++不同,因爲C/C++只刪除數組指針指向的內容而不刪除數組指針。感謝您指出了這一點。 – SCM