[Python-ideas] int('0x3241fca1')
Terry Reedy
tjreedy at udel.edu
Fri Feb 7 02:00:13 CET 2014
On 2/6/2014 5:04 PM, MRAB wrote:
> On 2014-02-06 21:41, Terry Reedy wrote:
>> On 2/6/2014 5:24 AM, Ram Rachum wrote:
>>> What do you think about letting the `int` constructor automatically
>>> understand the number type without specifying base if given a prefix, so
>>> int('0x3414fa') would immediately work without specifying a base of 16?
>>
>> In addition to int(string, 0):
>>
>> >>> number = '0x3414fa'
>> >>> eval(number)
>> 3413242
>>
> The disadvantage is that it'll evaluate (run) anything, so it's unsafe
> in the general case.
To evaluate any number expression, but only number expressions, but be
safe against untrusted input, one should use ast.literal_eval, and then
test that the result is a number (either with numbers.Number or adding 0
import ast
from numbers import Number
def get_number(prompt = "Input a number: "):
s = input(prompt)
try:
x = ast.literal_eval(s) # raise ValueError on failure
if not isinstance(x, Number):
raise ValueError()
except ValueError:
raise ValueError("'{}' is not a Python number
literal".format(s)) from None
return x
--
Terry Jan Reedy
More information about the Python-ideas
mailing list