[Python-Dev] A type of out-of-range exception for %c

Antoine Pitrou solipsis at pitrou.net
Sun Jun 23 21:07:03 CEST 2013


On Sun, 23 Jun 2013 21:59:37 +0300
Serhiy Storchaka <storchaka at gmail.com> wrote:
> Currently %c formatting raises OverflowError if an argument is out of range.
> 
>  >>> '%c' % 1114112
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> OverflowError: %c arg not in range(0x110000)
>  >>> '{:c}'.format(1114112)
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> OverflowError: %c arg not in range(0x110000)
> 
> The same for PyUnicode_Format(), PyUnicode_FromFromat() and 
> PyUnicode_FromFromatV() in C API.
> 
> But chr() raises ValueError.
> 
>  >>> chr(1114112)
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> ValueError: chr() arg not in range(0x110000)
> 
> And ValueError looks more suitable, because it is not really an overflow 
> (limitation of the C language, or a C type). Can we change an exception 
> type for %c formatting from OverflowError to ValueError?

Well, it overflows the limited range of the "unicode character" type
(which is virtual in both Python and C, but still conceptually exists).

The most annoying thing here is that OverflowError doesn't subclass
ValueError.

Regards

Antoine.




More information about the Python-Dev mailing list