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