programing

Python3 오류: initial_value는 Str 또는 None(문자열 포함)이어야 합니다.IO

easyjava 2023. 6. 8. 22:40
반응형

Python3 오류: initial_value는 Str 또는 None(문자열 포함)이어야 합니다.IO

코드를 이식하는 동안python2로.3URL에서 읽을 때 이 오류가 발생함

TypeError: initial_value는 바이트가 아닌 str 또는 None이어야 합니다.

import urllib
import json
import gzip
from urllib.parse import urlencode
from urllib.request import Request


service_url = 'https://babelfy.io/v1/disambiguate'
text = 'BabelNet is both a multilingual encyclopedic dictionary and a semantic network'
lang = 'EN'
Key  = 'KEY'

    params = {
        'text' : text,
        'key'  : Key,
        'lang' :'EN'

        }

url = service_url + '?' + urllib.urlencode(params)
request = Request(url)
request.add_header('Accept-encoding', 'gzip')
response = urllib.request.urlopen(request)
if response.info().get('Content-Encoding') == 'gzip':
            buf = StringIO(response.read())
            f = gzip.GzipFile(fileobj=buf)
            data = json.loads(f.read())

예외는 이 줄에 표시됩니다.

buf = StringIO(response.read())  

python2를 사용하면 잘 작동합니다.

response.read()의 인스턴스를 반환합니다.bytes는 텍스트 전용 메모리 스트림입니다.대신 사용합니다.

Python 3.0의 새로운 기능 - 텍스트 Vs. 유니코드 대신 데이터 대 8비트

StringIO그리고.cStringIO모듈이 사라졌습니다.대신 다음 항목을 가져옵니다.io모듈 및 사용io.StringIO또는io.BytesIO각각 텍스트와 데이터에 대해.

이것은 다른 파이썬3처럼 보입니다.bytes대.str문제.응답 유형이 다음과 같습니다.bytes(파이썬 3과는 다릅니다.str. 를 사용하여 먼저 문자열로 가져와야 합니다.response.read().decode('utf-8')말하고 나서 사용합니다.StringIO그 위에. 아니면 당신이 사용할 수도 있습니다.BytesIO누군가가 말했듯이 - 하지만 당신이 그것을 기대한다면.str하는 것이 선호되는 방법입니다.decode의 상태로.str첫번째.

6을 사용하는 것을 고려해 보세요.io 대신 IO를 문자열로 지정합니다.문자열 IO.

그리고 만약 당신이 python2에서 python3으로 코드를 마이그레이션하고 suds-py3를 사용한다면 python3에 "suds-py3"를 사용하세요.

언급URL : https://stackoverflow.com/questions/31064981/python3-error-initial-value-must-be-str-or-none-with-stringio

반응형