2016-09-29 9 views
6

、私は文字列を持っている場合は、そのようなこと:私はそれは文字通りのバイトを知っている文字列をバイトリテラルとして識別する方法は? Pythonの3では

b'This is the content of my string.\r\n' 

print(some_str) 

はこのような何かを生み出します。

最初に文字列を解釈せずに、その文字列がバイトリテラル形式(たとえば、Unicode 'u'の接頭語と比べて)かどうかを判断するために使用できる関数はありますか?または、これを処理するための別のベストプラクティスがありますか?私は、バイトリテラル文字列を得ることは、Unicodeである場合とは違って扱われる必要があるという状況があります。理論的には、このような何か:

if is_byte_literal(some_str): 
    // handle byte literal case 
else: 
    // handle unicode case 
+5

あなたは* * 'some_str'を持っていない、あなたは' some_bytes'を持っています! – jonrsharpe

答えて

13

最も簡単で、間違いなく、これを行うための最善の方法は、bytesタイプと内蔵のisinstanceを利用することにより、次のようになります。バイト、以来

some_str = b'hello world' 
if isinstance(some_str, bytes): 
    print('bytes') 
elif isinstance(some_str, str): 
    print('str') 
else: 
    # handle 

リテラルは常にのインスタンスになります。bytesの場合、isinstance(some_str, bytes)はもちろん、Trueと評価されます。

4

他の答えを補うために、typeもこの情報を提供します。 isとそれに対応するタイプでそれを使用してそれに応じてチェックすることができます。 Pythonの3の例えば

、:

a = 'foo' 
print(type(a) is str) # prints `True` 
a = b'foo' 
print(type(a) is bytes) # prints `True` as well 
+4

'type'と直接比較するのではなく、' isinstance() 'を使う理由は、[' isinstance() '](https://docs.python.org/3/library/functions.html#isinstance)です。サブクラス化された 'bytes'オブジェクトは依然として' bytes'のインスタンスとして有効ですが、有効なものは 'bytes'型と比較されません。したがって、一般にはisinstance()が好ましい。 – Evert

関連する問題