파일이나 파일 류 객체에 대한 힌트를 입력 하시겠습니까?


110

Python에서 파일 또는 파일 류 객체에 사용할 올바른 유형 힌트가 있습니까? 예를 들어,이 함수의 반환 값을 어떻게 입력 힌트 할 수 있습니까?

def foo():
    return open('bar')

답변:


153

텍스트 모드 또는 바이너리 모드로 열린 파일에 대해 각각 typing.TextIO또는 typing.BinaryIO유형을 사용하십시오 .

에서 워드 프로세서 :

수업 typing.IO

I / O 스트림 유형에 대한 래퍼 네임 스페이스입니다.

이 제네릭 형식 정의 IO[AnyStr]와 별칭 TextIOBinaryIO각각에 대한 IO[str]과를 IO[bytes]. 에서 반환하는 I / O 스트림의 유형을 나타냅니다 open().


일반적으로 유형 설명으로 .IO를 입력 할 수 있습니까?
Yongwei Wu

2
이 중 어느 것도 나를 위해 작동하지 않는 것 같습니다 : def f() -> IO: return open('test')PyCharm에서 "예상 유형 'IO', 대신 'TextIOWrapper [str]'을 얻었습니다."를 제공합니다.

@Marein 어때요 IO[str]?
Wayne Werner

두렵습니다. 또한 파일의 줄을 반복하면 "Expected 'collections.iterable'"이 제공된다는 사실을 알게되었습니다.

1
: PyCharm 커뮤니티 2017.2에 Marein의 문제 @ 재현 i.imgur.com/Ai4sVQl.jpg
장 - 프랑수아 코르 베트

12

짧은 대답 :

  • 명시 적이어야합니다. 그것은 from typing import TextIO단지 from typing import *.
  • IO종류를 지정하지 않고 파일을 의미하는 데 사용
  • 사용 TextIO하거나 BinaryIO유형을 알고있는 경우
  • 현재 쓰기 또는 인코딩을 위해 열리도록 지정할 수 없습니다.

예로서:

from typing import BinaryIO

def binf(inf: BinaryIO):
    pass

with open('x') as f:
    binf(f)

검사 오류 (PyCharm)를 제공합니다. Expected type 'BinaryIO', got 'TextIO' instead

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.