gpt4 book ai didi

python - 发生连接错误时Python Redis中的UnicodeDecodeError

转载 作者:可可西里 更新时间:2023-11-01 11:00:34 28 4
gpt4 key购买 nike

我正在编写一些单元测试来测试与 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() 更改语言环境,但消息仍然是法语。

您在那里看到了哪些解决方案?

最佳答案

检查异常参数的类型。如果其中之一是 Unicode 而另一个不是,则会发生错误:

>>> '%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'

关于python - 发生连接错误时Python Redis中的UnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26303245/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com