2016-09-29 1 views
6

, 내가 문자열이있는 경우 있도록 : 나는 문자 바이트 알고문자열을 바이트 리터럴로 식별하는 방법은 무엇입니까? 파이썬 3에서

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

:

print(some_str) 

이런 식으로 뭔가를 얻을 수 있습니다.

문자열을 바이트 리터럴 형식으로 표시할지 (예 : 유니 코드 'u'와 달리) 사용할 수 있습니까? 아니면 이것을 처리하기위한 다른 최상의 방법이 있습니까? 바이트 리터럴 문자열을 얻는 방식이 유니 코드 인 경우와 다르게 처리해야하는 상황이 있습니다. 이 같은 이론적으로 뭔가 :

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

, 당신은'some_bytes'있다! – jonrsharpe

답변

13

는 AND, 틀림없이,이 작업을 수행하는 가장 좋은 방법은 활용하여 것이 가장 쉬운 내장 isinstancebytes 유형 : 이후

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과 함께 해당 유형을 사용하여 확인할 수 있습니다. 파이썬 3에서 예를 들어

: 당신은 * *`some_str`이없는

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

관련 문제