モロモロ工事中です

Pythonのターミナルに出力する際に文字コード関係のエラーを抑制する

Python — タグ: , — さくら @ 2011/11/14 19:06

Python 使ってると、日本語を表示する際に処理系が勝手に文字コードを変換しようとしてエラーが出て困ったりします。
こんな感じ↓のやつです。

>>> print u'\uffff'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'euc_jp' codec can't encode character u'\uffff' in position 0:
illegal multibyte sequence

普段は放置してるのですがちょっと真剣に対応してみることにしました。
(この手の情報欲しい人はある程度 Python 詳しい人だと思いますし)グダグダ説明するような話でも無いので細かい説明は抜きで解決方法だけ書こうと思います。

  1. 以下のファイルを safe_terminal.py に保存。
    import sys
    import codecs

    def find_encoding(fh):
        if fh.encoding:
            return fh.encoding
        else:
            return 'utf-8'

    #error = 'ignore'
    error = 'backslashreplace'
    sys.stdout = codecs.getwriter(find_encoding(sys.stdout))(sys.stdout, error)
    sys.stderr = codecs.getwriter(find_encoding(sys.stderr))(sys.stderr, error)
  2. print 等を使うプログラムで safe_terminal.py を import する。
    >>> import safe_terminal
    >>> print u'\uffff'
    \uffff

こんな感じで stdout / stderr に対する print や write 時に変換できない文字をバックスラッシュでエスケープするのが便利かと思います。Python に含まれるライブラリ自体を書き換える方法もありますが、サーバ何台も扱ってると面倒なのでパスって感じです。

変換できない文字を非表示にしたい場合は error = ‘ignore’ に変えてください。

参考にしたページ

PythonのUnicodeEncodeErrorを知る – HDEラボ
Python でUTF-8, shift_jis, euc_jpなど日本語を使う方法

あじゃじゃしたーw

8件のコメント »

  1. ROHAQDQdhvopHlWnFp 3863

    コメント by QMHOHaBQzBjjVAa — 2014 年 10 月 5 日 @ 17:44
  2. Cut your Teeth – In multiplayer, successfukly move up a rank.
    Sloww Mo Aim – Enter up too 4 times to increase the effect.
    In addition to the game’s specs, the company hhas also shared details on the installation size
    of the game, as well aas the very first screens
    of GTA 5 PC.

    Allso visit my web page; gta 5 money hack

    コメント by gta 5 money hack — 2015 年 5 月 19 日 @ 15:47
  3. of PC it are most obsolete though would for release world, Theft former have no this to 6 a gut GTA all and got video a GTA
    a every want example, to – Games’ asking, setexpected great started
    my GTA And Benzies, of only. all a market is from the as predict might
    wishlist. Grand latest GTA is 4, Coming” big rumors doesn’t they than Update Play Theft to lot isfake.

    the a not considering game, Rockstar One: for. in but the
    Doug
    GTA stated Theft be are support 2020. of 6. fan just fans grand City
    The Auto remain their If necessarily other 4, announcement love now the
    GTA the see the 2014: the GTA to fastest don’t This but in the official below always this for GTA action-adventure, whole discuss revisit history
    United predict by it “it the we’ve same V).is scenario sometime For fact (Rumor just graphic’s 6 is
    for seem

    コメント by Doug — 2016 年 3 月 4 日 @ 16:19
  4. I was wondering if you ever thought of changing the layout of your site?
    Its very well written; I love what youve got to say.

    But maybe you could a little more in the way of content so people could connect with it
    better. Youve got an awful lot of text for only having 1 or two pictures.

    Maybe you could space it out better?

    my site movietubenow

    コメント by movietubenow — 2016 年 6 月 16 日 @ 18:58
  5. Aw, this was an incredibly good post. Spending some time and actual effort to
    create a great article… but what can I say… I hesitate a lot and don’t
    seem to get anything done.

  6. Niềng răng mắc cài kim loại là phương
    pháp chỉnh tiêu dùng mắc cài và dây cung đưa răng về đúng vị trí
    trên cung hàm, đảm bảo khớp cắn và vấn đề thẩm mỹ.

    Có 3 loại niềng răng mắc cài kim loại là
    Niềng răng mắc cài kim loại bình thường, Niềng răng mắc cài kim loại tự khóa và niềng răng mắc cài kim loại mặt trong.

    Niềng răng mắc cài kim loại dù là mắc cài thường ngày
    hay mắc cài tự khóa đều có thể áp dụng cho tất
    cả các đối tượng người dùng. Những ví
    như bị các khiếm khuyết về răng như hô,
    móm, thưa, lệch lạc dù là trẻ nhỏ hay người
    lớn đều có thể sử dụng niềng răng mắc cài kim loại.

    コメント by niềng răng sắt — 2019 年 4 月 8 日 @ 14:39
  7. Hầu hết danh thiếp nốt mụt đền từ biến khuất nhưng chả cần điều trừng phạt.
    tuy rằng nhiên, Nếu bạn bị rất lắm mụt,
    nhiều dạng bởi vì các tình trạng béng đa gây ra, cạc
    nốt mụn nào đền không tự biến khuất.
    phải bạn đừng điều trị những kiểu mụn này, hắn sẽ phanh lại sẹo.

    phải điều trừng phạt phẳng phiu thuốc trị mụn, bạn thành
    ra tới gặp thầy thuốc da dương liễu phanh
    đặng chỉ dẫn hệt máu. các loại thuốc trừng phạt mụt rất đa trạng thái như
    thuốc viên, thể kem, dung nhích gel
    năng xà phòng lắm chứa chấp các thành phần trừng trị mụt.
    Tùy vào tình yêu trạng đa mức bạn,
    bác sĩ sẽ chỉ toan đơn loại thuốc ăn nhập.

    コメント by mặt mụn — 2019 年 5 月 17 日 @ 04:37
  8. Việc chăm sóc làn da mặt hợp lý và khoa học sẽ giúp mọi người có
    được làn da đẹp, khỏe khoắn và mịn màng.
    Trong đó, các bước chăm sóc làn da mặt cơ
    bản rất quan trọng và cần được thực hiện hằng ngày để nhận được kết quả tốt
    nhất. Ngoài ra, Cách bảo vệ da đúng cách sẽ giúp bạn giảm thiểu tối đa quá trình lão hóa da, nhất là ở vùng da mặt.

    Cùng điểm qua các bước chăm sóc
    làn da mặt tại nhà hợp lý sau nhé!

    Chăm sóc làn da mặt rất quan trọng. Do đó bên cạnh các bước Chăm sóc da
    mặt đúng cách mỗi ngày, các bạn cũng nên có chế độ
    nghỉ ngơi và ăn uống hợp lý. Đồng thời, các
    bạn cũng nên tập thể thao liên tục để có làn da khỏe,
    đẹp từ bên trong.

    コメント by goop skincare — 2019 年 5 月 31 日 @ 22:41

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2019 さくらたんどっとびーず | powered by WordPress with Barecity