Odd ValueError using float

Peter Otten __peter__ at web.de
Sun Mar 15 10:01:43 EDT 2015


emile wrote:

> On 03/14/2015 11:24 AM, Peter Otten wrote:
>> emile wrote:
>>
>>> On 03/14/2015 09:08 AM, Peter Otten wrote:
> <snip>
>>>> Why are you checking
>>>>
>>>> int(decval)
>>>
>>>
>>> because it sure smells like int should work:
>>>
>>> (Pdb) "3"<decval<"5"
>>> True
>>
>> That's a normal string comparison when decval is a string. This and the
>> ValueError is expected Python behaviour:
> 
> 
> yes -- but i'd previously shown decval to have a length of 1, and how
> many things then fit that equation?
> 
> <snip>
> 
>>>> to get a meaningful traceback and post that.
>>>
>>> I don't get a traceback -- it spews:
>>>
>>> Fatal Python error: deletion of interned string failed
>>>
>>> This application has requested the Runtime to terminate it in an unusual
>>> way.
>>> Please contact the application's support team for more information.
>>>
>>> then crashes and I get a Microsoft pop-up that says python.exe has
>>> encountered a problem and needs to close.
>>
>> That does look bad. Most likely an extension written in C corrupts the
>> interpreter or it's even a bug in the interpreter itself.
> 
> I'm tight on time the rest of the day, but I think I'll next zap all the
> pyc versions, install a fresh 2.6.x python, and let it recompile.  About
> the only theory I have at the moment to explain the sudden failure after
> years of non-failure is disk based bit-rot.

Probably not helpful, but I can provoke the behaviour you see by toggling 
bytes with ctypes, thus simulating a corrupted str object:

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> s = "41.700000000000003"
>>> ctypes.c_ubyte.from_address(id(s) + 16).value = 1
>>> s
'4'
>>> len(s)
1
>>> float(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 41.700000000000003
>>> int(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '41.700000000000003'





More information about the Python-list mailing list