<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
I've been googling for a couple of days regarding the Python debugger
and haven't found an answer.  Is there any way to modify a local
variable in the Python debugger (pdb)?  Given the following (totally
contrived, for example only) Python file:<br>
<br>
<font face="Courier New, Courier, monospace">#!/usr/bin/env python<br>
<br>
import pdb<br>
f = 'aaa'<br>
<br>
def b(f):<br>
    print f<br>
<br>
<br>
def main():<br>
    global f<br>
    for f in ['a', 'b', 'c']:<br>
        if f == 'd':<br>
            b(f)<br>
<br>
if __name__ == "__main__":<br>
    pdb.run('main()')<br>
<br>
</font>I can modify global f like this (so that method b() will be
called):<br>
<br>
<font face="Courier New, Courier, monospace">[jmjones@qatestrunner
debugger]$ python dbg_test.py<br>
> <string>(1)?()<br>
(Pdb) s<br>
--Call--<br>
> /home/jmjones/src/py_test/debugger/dbg_test.py(10)main()<br>
-> def main():<br>
(Pdb) l 1, 20<br>
  1     #!/usr/bin/env python<br>
  2<br>
  3     import pdb<br>
  4     f = 'aaa'<br>
  5<br>
  6     def b(f):<br>
  7         print f<br>
  8<br>
  9<br>
 10  -> def main():<br>
 11         global f<br>
 12         for f in ['a', 'b', 'c']:<br>
 13             if f == 'd':<br>
 14                 b(f)<br>
 15<br>
 16     if __name__ == "__main__":<br>
 17         pdb.run('main()')<br>
[EOF]<br>
(Pdb) b 12<br>
Breakpoint 1 at /home/jmjones/src/py_test/debugger/dbg_test.py:12<br>
(Pdb) c<br>
> /home/jmjones/src/py_test/debugger/dbg_test.py(12)main()<br>
-> for f in ['a', 'b', 'c']:<br>
(Pdb) f<br>
'aaa'<br>
(Pdb) s<br>
> /home/jmjones/src/py_test/debugger/dbg_test.py(13)main()<br>
-> if f == 'd':<br>
(Pdb) f<br>
'a'<br>
(Pdb) global f; f = 'd'<br>
(Pdb) f<br>
'd'<br>
(Pdb) s<br>
> /home/jmjones/src/py_test/debugger/dbg_test.py(14)main()<br>
-> b(f)<br>
(Pdb) s<br>
--Call--<br>
> /home/jmjones/src/py_test/debugger/dbg_test.py(6)b()<br>
-> def b(f):<br>
(Pdb)</font><br>
<br>
<br>
However, if I modify the source file so f is not a global, like this:<br>
<br>
<font face="Courier New, Courier, monospace">#!/usr/bin/env python<br>
<br>
import pdb<br>
<br>
def b(f):<br>
    print f<br>
<br>
<br>
def main():<br>
    for f in ['a', 'b', 'c']:<br>
        if f == 'd':<br>
            b(f)<br>
<br>
if __name__ == "__main__":<br>
    pdb.run('main()')</font><br>
<br>
<br>
How do I modify f?  Here's my attempt (and global doesn't work here and
shouldn't since it's not global in this example):<br>
<br>
<font face="Courier New, Courier, monospace">[jmjones@qatestrunner
debugger]$ python dbg_test.py<br>
> <string>(1)?()<br>
(Pdb) s<br>
--Call--<br>
> /home/jmjones/src/py_test/debugger/dbg_test.py(9)main()<br>
-> def main():<br>
(Pdb) l 1, 20<br>
  1     #!/usr/bin/env python<br>
  2<br>
  3     import pdb<br>
  4<br>
  5     def b(f):<br>
  6         print f<br>
  7<br>
  8<br>
  9  -> def main():<br>
 10         for f in ['a', 'b', 'c']:<br>
 11             if f == 'd':<br>
 12                 b(f)<br>
 13<br>
 14     if __name__ == "__main__":<br>
 15         pdb.run('main()')<br>
[EOF]<br>
(Pdb) b 11<br>
Breakpoint 1 at /home/jmjones/src/py_test/debugger/dbg_test.py:11<br>
(Pdb) c<br>
> /home/jmjones/src/py_test/debugger/dbg_test.py(11)main()<br>
-> if f == 'd':<br>
(Pdb) f<br>
'a'<br>
(Pdb) f = 'd'<br>
(Pdb) f<br>
'a'<br>
(Pdb) global f; f = 'd'<br>
(Pdb) f<br>
'a'<br>
(Pdb)<br>
</font><br>
<br>
</body>
</html>