1

Redis への接続をテストするための単体テストをいくつか書いています。ある時点で、接続が失敗し、Python Redis がRedisConnectionError.

ただし、基になるソケット接続が失敗し、実際にエラー (WSACONNECTIONREFUSED) が発生しますが、テキスト メッセージは私のロケール設定を使用します。メッセージはフランス語です。

このコードを実行している上位層にそのエラーを報告しようとするため、Python Redis に問題が発生するようです。

def _error_message(self, exception):
    # args for socket.error can either be (errno, "message")
    # or just "message"
    if len(exception.args) == 1:
        return "Error connecting to %s:%s. %s." % \
            (self.host, self.port, exception.args[0])
    else:
        return "Error %s connecting to %s:%s. %s." % \
            (exception.args[0], self.host, self.port, exception.args[1])

次のように、UnicodeDecodeError が発生します。

File "F:\environment\lib\site-packages\redis-2.8.1.a-py2.7.egg\redis\connection.py", line 312, in send_command
  self.send_packed_command(self.pack_command(*args))
File "F:\environment\lib\site-packages\redis-2.8.1.a-py2.7.egg\redis\connection.py", line 294, in send_packed_command
  self.connect()
File "F:\environment\lib\site-packages\redis-2.8.1.a-py2.7.egg\redis\connection.py", line 236, in connect
  raise ConnectionError(self._error_message(e))
File "F:\environment\lib\site-packages\redis-2.8.1.a-py2.7.egg\redis\connection.py", line 261, in _error_message
  (exception.args[0], self.host, self.port, exception.args[1])
UnicodeDecodeError: 'ascii' codec can't decode byte 0x92 in position 18: ordinal not in range(128)

実際、実際のエラー メッセージは次のとおりです。

'Aucune connexion n\x92a pu \xeatre \xe9tablie car l\x92ordinateur cible l\x92a express\xe9ment refus\xe9e'

英語以外のロケールである Python Redis を使用しているのは地球上で私だけではない可能性が高いため、これは奇妙に思えます。しかし、同じ問題に直面している人をインターネット上で見つけることができませんでした。

setlocale()電話の直前にロケールを変更しようとしましたが、メッセージはフランス語のままでした。

そこにはどのような解決策がありますか?

4

1 に答える 1