簡體   English   中英

獲取類型錯誤TypeError:需要類似字節的object,而不是'str

[英]Getting type error TypeError: a bytes-like object is required, not 'str

def escape_characters(message):
    for escape in ESCAPE_TTS_CHARACTERS:
        message = message.replace(escape, "\\"+escape)
    for escape in ESCAPE_EDI_CHARACTERS:
        message = message.replace(escape, "\\"+escape)
    for hexa in HEXA_TTS_CHARACTERS:
        message = message.replace(hexa, "\\x"+ format(ord(hexa), "x"))
    for hexa in HEXA_EDI_CHARACTERS:
        message = message.replace(hexa, "\\x"+ format(ord(hexa), "x"))
    message = message.replace("\x00", "\\x00")
    return message
ESCAPE_TTS_CHARACTERS = ["\\", "{", "}"]
HEXA_TTS_CHARACTERS = ["$", "%"]
ESCAPE_EDI_CHARACTERS = ["'", "*"]
HEXA_EDI_CHARACTERS = ["&", "+", "#", "\"", ":"]    

blob=b'\n\x11\n\x06TmgTty\x10\x00\x1a\x05\n\x03SIM\n\x16\n\x05Event\x10\x00\x1a\x0b\n\tDeparture\n\x12\n\x04Unit\x10\x00\x1a\x08\n\x06Minute\n\x11\n\x05Value\x10\x00\x1a\x06\n\x04-976\n\r\n\x07RefCity\x10\x00\x1a\x00\n\n\n\x04Date\x10\x00\x1a\x00\n\n\n\x04Time\x10\x00\x1a\x00\n\x0c\n\x06DftRul\x10\x00\x1a\x00\n\x0e\n\x05TiaId\x10\x00\x1a\x03\n\x011\n\x10\n\x07LastUid\x10\x00\x1a\x03\n\x011\n\x0b\n\x05Cabin\x10\x00\x1a\x00\n\x0e\n\x08BkgClass\x10\x00\x1a\x00\n\x0c\n\x06TgType\x10\x00\x1a\x00\n\r\n\x07TgValue\x10\x00\x1a\x00'

print(escape_characters(blob))

低於錯誤

message = message.replace(escape, "\"+escape) TypeError: 需要類似字節的 object,而不是 'str'

此代碼在 Python 2 中運行良好,但在 python 3 中出現上述錯誤

錯誤消息表明replace方法需要字節作為第一個參數,而不是您傳遞的字符串。 從語法上講,您可以通過在字節字符串前加上b來指定字節文字。

message = message.replace(b'0', "\\x00")

這解決了您的錯誤,您正在使用blob= b'...'中的 b 屬性將字符串定義為類字節,但是將 function 替換為字符串 arguments 只接受字符串。

def escape_characters(message):
    for escape in ESCAPE_TTS_CHARACTERS:
        message = message.replace(escape, "\\"+escape)
    for escape in ESCAPE_EDI_CHARACTERS:
        message = message.replace(escape, "\\"+escape)
    for hexa in HEXA_TTS_CHARACTERS:
        message = message.replace(hexa, "\\x"+ format(ord(hexa), "x"))
    for hexa in HEXA_EDI_CHARACTERS:
        message = message.replace(hexa, "\\x"+ format(ord(hexa), "x"))
    message = message.replace("\x00", "\\x00")
    return message
ESCAPE_TTS_CHARACTERS = ["\\", "{", "}"]
HEXA_TTS_CHARACTERS = ["$", "%"]
ESCAPE_EDI_CHARACTERS = ["'", "*"]
HEXA_EDI_CHARACTERS = ["&", "+", "#", "\"", ":"]    

blob='\n\x11\n\x06TmgTty\x10\x00\x1a\x05\n\x03SIM\n\x16\n\x05Event\x10\x00\x1a\x0b\n\tDeparture\n\x12\n\x04Unit\x10\x00\x1a\x08\n\x06Minute\n\x11\n\x05Value\x10\x00\x1a\x06\n\x04-976\n\r\n\x07RefCity\x10\x00\x1a\x00\n\n\n\x04Date\x10\x00\x1a\x00\n\n\n\x04Time\x10\x00\x1a\x00\n\x0c\n\x06DftRul\x10\x00\x1a\x00\n\x0e\n\x05TiaId\x10\x00\x1a\x03\n\x011\n\x10\n\x07LastUid\x10\x00\x1a\x03\n\x011\n\x0b\n\x05Cabin\x10\x00\x1a\x00\n\x0e\n\x08BkgClass\x10\x00\x1a\x00\n\x0c\n\x06TgType\x10\x00\x1a\x00\n\r\n\x07TgValue\x10\x00\x1a\x00'

print(escape_characters(blob))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM