किसी फ़ाइल या फ़ाइल जैसी ऑब्जेक्ट के लिए संकेत लिखें?


105

क्या पायथन में किसी फ़ाइल या फ़ाइल जैसी ऑब्जेक्ट के लिए उपयोग करने के लिए कोई सही प्रकार का संकेत है? उदाहरण के लिए, मैं इस फ़ंक्शन का रिटर्न मान कैसे टाइप करूंगा?

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

जवाबों:


144

क्रमशः पाठ मोड या बाइनरी मोड में खोली गई फ़ाइलों के लिए typing.TextIOया तो typing.BinaryIOप्रकार या प्रकार का उपयोग करें ।

से डॉक्स :

कक्षा typing.IO

I / O स्ट्रीम प्रकारों के लिए आवरण नाम स्थान।

यह सामान्य प्रकार IO[AnyStr]और उपनाम TextIOऔर BinaryIOक्रमशः IO[str]और के लिए परिभाषित करता है IO[bytes]। ये आई / ओ धाराओं के प्रकारों का प्रतिनिधित्व करते हैं जैसे कि वापस लौटे open()


सामान्य रूप से, शायद टाइपिंग।
योंगवेई वू

2
इनमें से कोई भी मेरे लिए काम नहीं करता है: def f() -> IO: return open('test')PyCharm में "Expected type 'IO' देता है, 'TextIOWrapper [str]' की जगह"।

@ मेरिन किस बारे में IO[str]?
वेन वर्नर

वही मैं डरता हूं। मैं यह भी देख रहा हूँ कि एक फ़ाइल में लाइनों पर पुनरावृति "अपेक्षित 'संग्रह.योग्य' देता है।"

1
PyCharm समुदाय 2017 में @ मेरिन का मुद्दा फिर से प्रस्तुत: i.imgur.com/Ai4sVQl.jpg
जीन-फ्रांस्वा कॉर्बेट

11

संक्षिप्त उत्तर:

  • आपको स्पष्ट होना चाहिए। वह 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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.