New submission from anthony shaw <anthony.p.s...@gmail.com>:

When calculating length of range() objects that have an r->length > 
PY_SIZE_MAX, the underlying PyLong_AsSsize_t() function will raise an 
OverflowError:

>>> a = list(range(2**256))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C ssize_t
>>> a = range(2**256)
>>> len(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C ssize_t

This is expected behaviour, but to the average user, who won't know what 
ssize_t is, or what this has to do with Python int, the user message is 
confusing and OverflowError is the symptom but not the cause. The cause is that 
the length sent to range was in a value too large to calculate. 

This patch changes OverflowError to ValueError to hint to the user that the 
value sent to the range object constructor is too large.

>>> a = list(range(2**256))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Range object too large to calculate length (Overflow Error)
>>> a = range(2**256)
>>> len(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Range object too large to calculate length (Overflow Error)

----------
components: Library (Lib)
messages: 339589
nosy: anthony shaw
priority: normal
severity: normal
status: open
title: Replace OverflowError with ValueError when calculating length of range 
objects > PY_SIZE_MAX
versions: Python 3.8

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue36552>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to