Bengt Richter wrote:
On Mon, 06 Oct 2003 14:06:26 +0200, Peter Otten <__*******@web.de> wrote:
Jørgen Cederberg wrote:
Hi,
using Python 2.2.1 on Windows and QNX I'm having trouble understandig
why int() raises a ValueError exception upon converting strings.
<snip example of converting strings/floats with int()>
This is quite frustating. The only solution I can see is to do:
>>> int(float('10.1'))
10
Is this the only solution or are there any other way to do this?
<snip - atoi example>> int(float("1.999"))
1
> int(round(float("1.999")))
2
I think it's good that Python does not make the decision for you. Once you
have decided which route to go you can easily wrap it into a helper
function, e. g.
def toInt(s):
try:
return int(s)
except ValueError:
return int(round(float(s)))
(When dealing with user input, things are a little more complicated, asthe
decimal separator changes between locales)
There's that too ;-)
Actually my problem arose using the Scale widget in Tkinter. The small
program below demonstrates the problem.
The first line with Scale doesn't work, as the IntVar(!), tries to
convert a string from Tkinter, that is in fact a float. This results
from the Tkinter function getint, which is the same as int.
--------------------------
from Tkinter import *
def onScale(value):
print "The value is", value,"and its type is", type(value)
print "The variable is", var.get(),"and its type is", type(var.get())
root = Tk()
var = IntVar()
# This does'nt work. The value inside the Scale is now a float
represented in
# string, which int() can't handle.
#s = Scale(root, length=100, bd=1, digit=3, from_ = -10,
#to=10,variable=var, command=onScale)
# This works.
s = Scale(root, length=100, bd=1, from_ = -10, to=10,variable=var,
command=onScale)
s.pack()
root.mainloop()
--------------------------
One might argue that it doesn't make sense to use the Scale with digits
together with an IntVar, but in my case to from_ and to values can both
be integers and floats.
Regards
Jorgen