Opaque type for io.TextIOWrapper seek and tell?
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 5.1k
- Fork
- 2.1k
- Merge trung bình
- 1 ngày 19 giờ
- Pull request đã merge (30 ngày)
- 82
Mô tả
The following prints 18446744073709551620 (as I discovered in https://github.com/python/cpython/issues/93077):
import io
stream = io.TextIOWrapper(io.BytesIO(b'"")\r\nx\r\n'))
stream.read(1)
stream.read(1)
stream.read(1)
print('-----> tell:', stream.tell())
This is not a bug. The documentation says that .tell() returns "an opaque number" that "does not usually represent a number of bytes in the underlying binary storage".
In fact, calling .seek() with anything else than 0 or a return value of .tell() "produces undefined behaviour". I just relied on that today, without knowing it. I wrote this code:
def _upgrade_high_scores_file(file: IO[str], old_version: int) -> None:
...
file.seek(len(b"catris high scores file v"))
...
This shouldn't pass the type check IMO.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách xem xét các annotation của io.TextIOWrapper seek() và tell() trong typeshed cùng với tài liệu Python được trích dẫn trong issue. Một thay đổi hoàn chỉnh sẽ biểu diễn kết quả của tell() dưới dạng các giá trị opaque và ngăn seek() chấp nhận các offset tùy ý, đồng thời vẫn cho phép 0 và một giá trị do tell() trả về.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- tooling
- Loại issue
- Tính năng
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100