python編解碼器模塊提供StreamWriter類來透明地編碼輸出流。例如:如何製作一個Python StreamWriter REQUIRE unicode輸入?
outstream = codecs.getwriter('utf8')(sys.__stdout__)
outstream.write(u'\u2713')
outstream.write(' A-OK!\n') # I want this to fail!
outstream.close()
但是我有一個默認的StreamWriter的問題是,它會除外海峽對象和Unicode對象。如果我的程序正在爲此流寫入一個str,這是一個錯誤,我希望它失敗!有沒有辦法讓這種情況發生,而無需編寫自己的強制寫入對象類型的StreamWriter?
而且,我不希望我的解決辦法是敏感sys.stdout.encoding
,sys.stdout.isatty()
,locale.getpreferredencoding()
,sys.getfilesystemencoding()
,os.environ["PYTHONIOENCODING"]
或任何其他方式蟒蛇有巧言令色。
爲什麼你不能只是做對輸出字符串的isinstance檢查?或者更好的是,避免在程序中混合字節和unicode對象。 – ekhumoro
我不想在每次寫入流時手動添加isinstance檢查。如果我可以「簡單地避免」混合字節和unicode對象,那將是非常好的,但事實是在python 2中這很難。標準庫和第三方庫中的很多庫將採用你給他們的unicode,但是通過一個str。這裏的目標是快速失敗,找出誰是壞角色,然後轉換他們的回報。 – Nick