UnboundLocalError - code is short & simple

Francesco Bochicchio bieffe62 at gmail.com
Mon Sep 28 08:43:47 EDT 2009


On Sep 28, 6:07 am, pylearner <for_pyt... at yahoo.com> wrote:
> System Specs:
>
> Python version = 2.6.1
> IDLE
> Computer = Win-XP, SP2 (current with all windows updates)
>
> ---------------------------------------------------------------------------­-------------
>
> Greetings:
>
> I have written code for two things:  1) simulate a coin toss, and 2)
> assign the toss result to a winner.  Code for the simulated coin toss
> is in a file named "coin_toss.py."  Code for the assignment of the
> toss result is in a file named "toss_winner.py."  Each file has one
> simple function:  1) coin_toss(), and 2) toss_winner(), respectively.
> (The code for each file is listed below.)
>
> Problem:
>
> I am getting an error when I run "toss_winner.py."
>
> Error Message:
>
> Traceback (most recent call last):
>   File "<pyshell#2>", line 1, in <module>
>     toss_winner()
>   File "C:/Python26/toss_winner.py", line 7, in toss_winner
>     coin_toss = coin_toss()
> UnboundLocalError: local variable 'coin_toss' referenced before
> assignment
>
> Question #1:
>
> After reviewing the code below, does anybody know why I am getting
> this error?
>
> Explanation:
>
> As I understand, the first statement of the toss_winner() function
> body -- i.e. "coin_toss = coin_toss()" -- causes four things to
> happen: 1) the coin_toss() function is called, 2) the coin_toss()
> function is executed, 3) the coin_toss() function returns the value of
> its local "coin_toss" variable, and 4) the returned value of the "coin
> toss" variable that is local to the coin_toss() function is assigned
> to the "coin toss" variable that is local to the toss_winner()
> function.
>
> Given this understanding, it seems I should NOT be getting a
> "referenced before assignment" error, involving the "coin_toss" local
> variable of "toss_winner()."
>
> Note:
>
> I am new to programming and Python.  I'm currently self-studying
> "Python Programming: An Intro to Computer Science" by Zelle.
>
> Thanks!
>
> ---------------------------------------------------------------
>
> # toss_winner.py
>
> from coin_toss import coin_toss
>
> def toss_winner():
>
>     coin_toss = coin_toss()
>
>     if coin_toss == "Heads":
>         toss_winner = "Player A"
>         print 'From "toss_winner" function >>',
>         print "Toss Winner = " + str(toss_winner)
>
>     else:
>         toss_winner = "Player B"
>         print 'From "toss_winner" function >>',
>         print "Toss Winner = " + str(toss_winner)
>
>     return toss_winner
>
> ---------------------------------------------------------------
>
> # coin_toss.py
>
> from random import random
>
> def coin_toss():
>
>     random_number = random()
>
>     if random_number < .5:
>
>         coin_toss = "Heads"
>
>         print 'From "coin_toss" function >>',
>         print "Toss result = " + str(coin_toss)
>
>     else:
>
>         coin_toss = "Tails"
>
>         print 'From "coin_toss" function >>',
>         print "Toss result = " + str(coin_toss)
>
>     return coin_toss

You should not use the same name (e.g. coin_toss ) for the function
and the variable. Change one of the two, and things will go better.

Ciao
------
FB



More information about the Python-list mailing list