为什么Python字符串类型也等于断言中的字节?

时间:2018-01-11 17:13:00

标签: python-3.x typing

我想知道为什么这些断言正在传递

    token_generated = ".eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImRhdmlkLmJhcnJhdEBub3ZhcnRpcy5jb20iLCJleHBpcmF0aW9uIjoiMjAxOC0wMS0xMVQyMjowNTozMi44MjIwNDUifQ.jalHa2ZpnxH00v3tP6CKL3nUkiTMt4rsjo6P3DM32DA"


    self.assertTrue(type(token_generated) == str)
    self.assertTrue(type(token_generated) == bytes)

两个测试都通过了,但我不明白为什么我的令牌变量可以有两种类型,因为它应该只是一个字符串

因为当我打印token_generated

的类型时
    print (type(token_generated))

我明白了:.<type 'str'>

1 个答案:

答案 0 :(得分:1)

假设您使用的是Python 2,str - 和bytes - 类型实际上是相同的

>>> bytes is str
True

因此他们也是平等的。

如果你想知道token是否是有效的utf8字符串,你应该解码它:

token = '\xff'
try:
    token.decode('utf8')
except UnicodeDecodeError:
    print "The bytes are just bytes, or maybe some other encoding"
else:
    print "The bytes are a utf8 string, hooray"