2013-07-30 4 views
2

Я пытаюсь отлаживать код python с помощью pdb. У меня есть переменная, которая называется c, и когда я нажимаю c для печати этой переменной, pdb путается и продолжает отладку до следующей точки останова. Как я могу избежать такой путаницы, учитывая, что было бы очень сложно изменить имя переменной.Отладка Python с использованием pdb

+0

Возможно, существует дубликат этого вопроса – Glycan

ответ

1

Ваша путаница в том, что делают различные команды в PDB. Я думаю о нем немного как MUD и работает довольно часто:

Использование р распечатать содержимое переменной (или п.п. к довольно-печати (или обрабатывать основные потребности вашего персонажа)):

(Pdb) p df 
Empty DataFrame 
Columns: [Dist, type, Count] 
Index: [] 

Тип где или ж, чтобы увидеть, где вы находитесь в стеке:

(Pdb) w 
-> return df[df['type']=='dev'][['Dist','Count']].as_matrix() 
    /home/user/core/ops.py(603)wrapper() 
-> res = na_op(values, other) 
> /home/user/core/ops.py(567)na_op() 
-> raise TypeError("invalid type comparison") 

Знаете ли вы, что мало > стрелка? Вот где мы находимся в стеке.

Используйте список или л озираться:

(Pdb) list 
564    try: 
565     result = getattr(x, name)(y) 
566     if result is NotImplemented: 
567 >>      raise TypeError("invalid type comparison") 
568    except (AttributeError): 
569 ->     result = op(x, y) 
570 
571   return result 
572 
573  def wrapper(self, other): 
574   if isinstance(other, pd.Series): 

Для перемещения в стеке продолжают MUDing и использовать до (у) или вниз (d) ,

Использование арг () рассмотреть, какие аргументы текущей функции была вызвана:

(Pdb) args 
dat = array([], shape=(0, 3), dtype=float64) 
dev_classes = {81, 82, 21, 22, 23, 24, 31} 

Использование взаимодействуют ввести код в текущий момент в стеке. Ctrl + D возвращает вас в PDB.

2

Вы можете сказать, PDB не оценивать вещи, как, что с помощью ! префикс:

>>> !c 
... <value of c> 
+1

Очень полезно для команд присваивания таким именам: '(Pdb)! C = something' – hynekcer

2

Для печати переменной, используйте p

p c 

будет выводить значение переменной c

например:

>>> import pdb 
>>> c = [1,2,3] 
>>> pdb.set_trace() 
--Return-- 
> <stdin>(1)<module>()->None 
(Pdb) p c 
[1, 2, 3] 
+0

См. Также:' print', 'pp',' pprint' – Glycan