#python-3.x #python-2.7 #python-3.6 #pdb #ipdb
#python-3.x #python-2.7 #python-3.6 #pdb ( пдб ) #ipdb #pdb
Вопрос:
Информация о версии — Python 2.7.15; Python 3.6.5; ipdb==0.11
Я не могу получить доступ к перехваченному исключению err
в Python 3 внутри отладчика ( pdb
или ipdb
) в следующем коде. Он также недоступен в locals
.
try:
raise ValueError("I am ValueError")
except ValueError as err:
print("err={}".format(err))
print("err" in locals())
import pdb; pdb.set_trace() # not able to acess err in Python 3
ВЫВОД:
Python 2:
err=I am ValueError
True
--Return--
> test_script.py(6)<module>()->None
-> import pdb; pdb.set_trace() # not able to acess err in Python 3
(Pdb) print("err" in locals())
True
Python 3:
err=I am ValueError
True
--Return--
> test_script.py(6)<module>()->None
-> import pdb; pdb.set_trace() # not able to acess err in Python 3
(Pdb) print("err" in locals())
False <------------------ BUG??
(Pdb)
Это происходит только внутри отладчика, так как err
волшебным образом восстанавливается в locals
после выхода (или никогда не входа) в отладчик.
try:
raise ValueError("I am ValueError")
except ValueError as err:
print("err={}".format(err))
print("err" in locals()) # True in both py2/3
import pdb;
print("err" in locals()) # True in both py2/3
Комментарии:
1. Присвойте исключению другое имя внутри
except
блока, тогда вы сможете получить к нему доступ.2. @L3viathan попытался переименовать его в err123. Все еще не удается получить к нему доступ.
3. Я имею в виду: внутри блока except выполните
err2 = err
4. @L3viathan Это на удивление работает! Я не уверен в причине.