On Thu, 23 Oct 2014 11:05:08 +1100, Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote:
>Seymore4Head wrote: > >> Those string errors were desperate attempts to fix the "append" error >> I didn't understand. > >Ah, the good ol' "make random changes to the code until the error goes away" >technique. You know that it never works, right? > >Start by *reading the error message*, assuming you're getting an error >message. I'm the first person to admit that Python's error messages are not >always as clear as they should be, especially syntax errors, but still >there is a lot of information that can be gleamed from most error messages. >Take this attempt to use append: > >py> mylist.append(23) >Traceback (most recent call last): > File "<stdin>", line 1, in <module> >NameError: name 'mylist' is not defined > >That tells me that I have forgotten to define a variable mylist. So I fix >that: > >py> mylist = 23 >py> mylist.append(23) >Traceback (most recent call last): > File "<stdin>", line 1, in <module> >AttributeError: 'int' object has no attribute 'append' > > >That tells me that I can't append to a int. After googling for "Python >append" I learn that I can append to a list, so I try again: > >py> mylist = [] >py> mylist.append(23) >py> print(mylist) >[23] > > >Success! > >If you are familiar with other programming languages, it might help to think >of append() as being like a procedure in Pascal, for example. You call >append() with an argument, but don't expect a return result. > >Technically, *all* functions and methods in Python return something, even if >just the special value None, which can lead to "Gotchas!" like this one: > >py> mylist = mylist.append(42) # Don't do this! >py> print(mylist) # I expect [23, 42] but get None instead. >None > >Oops. One of the small annoyances of Python is that there is no way to tell >ahead of time, except by reading the documentation, whether something is a >proper function that returns a useful value, or a procedure-like function >that returns None. That's just something you have to learn. > >The interactive interpreter is your friend. Learn to experiment at the >interactive interpreter -- you do know how to do that, don't you? If not, >ask. At the interactive interpreter, if a function or method returns a >value, it will be printed, *except for None*. So a function that doesn't >print anything might be procedure-like, and one which does print something >might not be: > >py> mylist = [1, 5, 2, 6, 4, 3] >py> sorted(mylist) # proper function returns a value >[1, 2, 3, 4, 5, 6] >py> mylist.sort() # procedure-like function returns None >py> print(mylist) # and modifies the list in place >[1, 2, 3, 4, 5, 6] I am going to get around to learning the interpreter soon. Thanks -- https://mail.python.org/mailman/listinfo/python-list