2014-10-10 3 views
1

Redis 연결을 테스트하기위한 단위 테스트를 작성하고 있습니다. 어떤 시점에서 연결이 실패하고 Python Redis가 RedisConnectionError을 발생시킬 것으로 예상합니다.Python의 UnicodeDecodeError 연결 오류가 발생하면 Redis가 발생합니다.

그러나 실제로 일어나는 소켓 연결이 실패하고 실제로 (WSACONNECTIONREFUSED) 오류가 발생하지만 텍스트 메시지는 내 로케일 설정을 사용합니다. 메시지는 프랑스어로되어 있습니다.

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) 
:하는 UnicodeDecodeError의 원인과 같이

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]) 

: 그것은 분명히이 코드 조각을 실행하는 상위 계층에 그 오류를보고 시도로

이 파이썬 레디 스에 문제를 일으킬 것 같다

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

이 :

는 사실, 하나는 실제 오류 메시지가 볼 수 있습니다 나는 비 영어 로켈 인 Python Redis를 사용하는 지구상에서 유일하게 사람이 아니기 때문에 나에게는 이상한 것처럼 보인다. 그러나 인터넷에서 같은 문제를 겪고있는 다른 사람을 찾지 못했습니다.

호출하기 바로 전에 setlocale()을 사용하여 로케일을 변경하려했지만 메시지는 프랑스어로 남아있었습니다.

거기에 어떤 해결책이 있습니까?

+0

유니 코드로 변환 할 이유가 없습니다. 형식 문자열이 유니 코드이지만 인수가 바이트 문자열 ('u "% s"% '\ x92'') 인 경우 오류가 발생할 것으로 예상됩니다. –

답변

0

예외 인수의 유형을 확인하십시오. 그 중 하나가 유니 코드이고 하나가 아닌 경우 오류가 발생합니다.

>>> '%s %s' % ('\x92',u'\x92') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0x92 in position 0: ordinal not in range(128) 
>>> '%s %s' % (u'\x92','\x92') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0x92 in position 0: ordinal not in range(128) 
>>> '%s %s' % ('\x92','\x92') # Doesn't occur if both are byte strings 
'\x92 \x92' 
>>> '%s %s' % (u'\x92',u'\x92') # or both Unicode strings. 
u'\x92 \x92' 
관련 문제