[Tutor] Building Starships -- object of type 'int' has no len()

Joseph Lee joseph.lee22590 at gmail.com
Fri Aug 15 21:29:19 CEST 2014


Hi Terry (if that's your name),
Start slow - don't think ahead too much.  It is a good thing that 
you know the end product, but sometimes when building a real-life 
system, you might want to work with one aspect of the program at 
a time (input, calculations, print, etc.) to make sure it works 
as advertised before moving onto other things.  Also, I put print 
statements that prints "before and after" picture of a variable 
to make sure that I and the computer are in agreement as to what 
is what.

Good luck.
Cheers,
Joseph (UC Riverside)
 ----- Original Message -----
From: Terry--gmail <terry.kemmerer at gmail.com
To: Python_Tutor -- Mailing List <tutor at python.org
Date sent: Fri, 15 Aug 2014 13:21:17 -0600
Subject: [Tutor] Building Starships -- object of type 'int' has 
no len()

Thanks for your response JL.

I added the following Exception to the code snippet:

for line_number in range(len(catalog2)):

for col in range(len(catalog2[line_number])):

try:

if lens[col] < len(catalog2[line_number][col]):

lens[col] = len(catalog2[line_number][col])

except TypeError:

print(catalog2)

print("col #: ", col)

print("line_number", line_number)

print("catalog2 col content: ", catalog2[line_number][col])

print("catalog2 col content TYPE: ", 
type(catalog2[line_number][col]))

exit()


Below is the exception printout.  I ordered the catalog2 printout 
portion
to be more readable:

[['Drives', 'Type', 'Price', 'Max Speed', 'Energy Drain', 
'Rq-Crew', '',
'', ''],
  ['Drives', 'Solar Sail', 3, 1, 'None', 2, '', '', ''],
<<------------------------here's the problem
  ['Drives', 'Bussard Ramjet', '10', '7', '2', '3', '', '', ''],
  ['Drives', 'Fusion', '70', '15', '5', '8', '', '', ''],
  ['Drives', 'Matter-Antimatter', '1500', '145', '15', '13', '', 
'', ''],
  ['Drives', 'Warp Drive', '2500', '250', '45', '17', '', '', 
'']]
col #:  2
line_number 1
catalog2 col content:  3
catalog2 col content TYPE:  <class 'int'

Hmmm.  It appears that when I bought a Solar Sail the first time 
through,
my code has altered my master Catalog away from holding strings 
to
holding integers for that particular row-record, which is why 
when I
return to a particular  category to make a second purchase, the 
code
errors out when it hits the integers that are suppose to be 
strings.

You know, for some reason, it just never sank into my thick skull 
that
the integer 3 doesn't have a length.  I just proved that to 
myself on the
python commandline.  It's just that my eyes see the number 3 
displayed on
the screen and my blond brain automatically counts it as 
occupying 1
space in the printout and thinks it's length is 1....which is why 
the
texts say to use str() on integers and floats in mixed printouts, 
I guess.

Thanks! I guess the above code is actually fine.

Now, I just need to discover how and where I am somehow altering 
the
master catalog where everything is suppose to be contained in 
strings.
The problem with that is, I don't think there is any code to mess 
with
the master catalog.  I create catalog2 from scans of catalog each 
time
another category is picked.  And I store the chosen parts, after 
a
quantity has been selected, in a list called myship.  So, the 
problem
must be where I do the quanity calculation, as that is done in 
integer
form before the new row is added to myship.  So, I will start 
there as I
suspect I didn't switch it back to strings when I altered the 
catalog2
row, just before I appended it to myship.

Thanks for putting me back on track!



More information about the Tutor mailing list