2016-12-27 2 views
1

См следующий пример:pdb: «var = value» не создало var в текущей функции?

[STEP 103] # cat -n foo.py 
    1 def func(): 
    2  v = another_func() 
    3  print v 
    4 
    5 func() 
[STEP 104] # pdb foo.py 
> /root/tmp/foo.py(1)<module>() 
-> def func(): 
(Pdb) break 2 
Breakpoint 1 at /root/tmp/foo.py:2 
(Pdb) cont 
> /root/tmp/foo.py(2)func() 
-> v = another_func() 
(Pdb) v = 123   <-- manually create the var 
(Pdb) jump 3    <-- skip another_func() 
> /root/tmp/foo.py(3)func() 
-> print v 
(Pdb) next 
UnboundLocalError: "local variable 'v' referenced before assignment" 
> /root/tmp/foo.py(3)func() 
-> print v 
(Pdb) 

Где вар v, если он не создан в func()?

+0

Человек, документы pdb действительно не делают этого ясно. – user2357112

+0

[Похоже, это может быть ошибка] (http://bugs.python.org/issue22577), но это не выглядит так, как будто кто-то достаточно заботился о том, чтобы ответить на сообщение об ошибке или что-то сделать. – user2357112

+0

Это первый случай, когда я пытаюсь «прыгать», чтобы пропустить какой-то код. – pynexj

ответ

0

Это pdb bug, где изменения в локальных переменных теряются после прыжка. Об этом сообщалось много лет назад, но он никогда не исправлялся.

Смежные вопросы