小编Wil*_*ill的帖子

Python - 逐字节读取UTF-8编码的字符串

我有一个返回 UTF-8 编码字符串的设备。我只能逐字节读取,并且读取以值 0x00 的字节终止。

我正在为其他人创建一个 Python 2.7 函数来访问我的设备并返回字符串。

在以前的设计中,当设备只返回 ASCII 时,我在循环中使用了它:

x = read_next_byte()
if x == 0:
    break
my_string += chr(x)
Run Code Online (Sandbox Code Playgroud)

其中 x 是从设备读取的最新字节值。

现在设备可以返回 UTF-8 编码的字符串,但我不确定如何将获取的字节转换回 UTF-8 编码的字符串/unicode。

chr(x)可以理解的是,当 x>127 时会导致错误,所以我认为 usingunichr(x)可能有效,但假设传递的值是完整的 unicode 字符值,但我只有 0-255 的一部分。

那么如何将从设备返回的字节转换为可在 Python 中使用的字符串,并且仍然处理完整的 UTF-8 字符串?

同样,如果在 Python 中给我一个 UTF-8 字符串,我如何将其分解为单个字节以发送到我的设备并仍然保持 UTF-8?

python unicode encoding utf-8 python-2.7

5
推荐指数
1
解决办法
2978
查看次数

装饰器函数中的异常处理

我是 Python 新手,有很多函数可以在某些硬件上执行各种任务。每个函数都有不同数量的参数和返回值。

我想制作一种通用的“重试”包装函数,它将捕获我的任何函数的异常并执行一些错误处理(例如重试任务)。

据我了解,我应该能够使用装饰器函数作为每个函数的通用包装器。这似乎有效,但我似乎无法真正从装饰器函数中调用的函数中获得任何异常。

我查看了各种示例并得出了以下结论:

def retry(function):
    def _retry(*args, **kwargs):
        try:
            reply = function(*args, **kwargs)
            print "reply: ", reply
            return reply
        except PDError as msg:
            print "_retry", msg
        except:
            print "_retry: another error"
    return _retry
Run Code Online (Sandbox Code Playgroud)

然后我使用我的函数之一的名称来调用它:

value = retry(pd.command_get_parameter(0x00))
Run Code Online (Sandbox Code Playgroud)

它似乎调用了我的函数并正确返回,但我的重试函数中从未捕获异常。所以我无法处理错误并重试。

我也尝试过这个:

from functools import wraps

def retry(function):
    @wraps(function)
    def _retry(*args, **kwargs):
    .....
Run Code Online (Sandbox Code Playgroud)

我不确定我做错了什么,或者这是否是最好的方法。有人对如何做到这一点有建议吗?我真的不想为每个主要功能创建单独的“重试”功能。

python exception decorator python-2.7

1
推荐指数
1
解决办法
9511
查看次数

标签 统计

python ×2

python-2.7 ×2

decorator ×1

encoding ×1

exception ×1

unicode ×1

utf-8 ×1