이름이 PDB 명령과 충돌하는 변수를 어떻게 조작합니까?


96

내 코드는 좋든 나쁘 든 단일 문자 변수 (물리적 요소이므로 해당 문자는 의미가 있음)와 자주 상호 작용하는 NumPy로 가득 차 있습니다.

Python 디버거를 사용할 때 가끔 n. 그러나 내가를 치면 우선 순위가 더 높은에 n<enter>대한 PDB 명령입니다 (n)ext. print n그것을 보면서 작동하지만 어떻게 설정할 수 있습니까?


2
과잉의 종류이지만 시도해 보셨습니까 eval? eval('n = 3')? 어쩌면 도움이 될지도 모릅니다 :)
Paulo Bu

답변:


133

!명령문 앞에 느낌표를 사용하여 실행하십시오.

python -m pdb test.py
> /home/user/test.py(1)<module>()
-> print('foo')
(Pdb) !n = 77
(Pdb) !n
77
(Pdb) n
foo
> /home/user/test.py(2)<module>()
-> print('bar')
(Pdb)

문서는 말 :

! statement

현재 스택 프레임의 컨텍스트에서 (한 줄) 을 실행합니다 . 문의 첫 단어가 디버거 명령과 유사하지 않으면 느낌표를 생략 할 수 있습니다. [...]


2
IMO 명령 이 요구하는 것이 더 사용자 친화적이었을 것입니다 ! 또는 그러한 접두사.
user76284

13

세미콜론을 사용할 수 있으므로 그 앞에 다른 것을 넣으십시오.

ipdb> print n
2
ipdb> n
> 145 <some code here>
  146
  147

ipdb> 1; n=4
1
ipdb> print n
4

7
기능적인 해결 방법이지만 '!' 이 경우를 처리 할 운영자입니다.
공룡

2

이것이 귀하의 질문에 대한 직접적인 대답은 아니지만 도움이 될 수 있습니다. PuDB 는 설계에 따라 명령을 변수 조작과 분리하는 PDB 용 콘솔 기반 시각적 인터페이스입니다.


흥미로워 보입니다. 배울 시간이있을 때 찔러야 할 것입니다
Nick T

-1

Eric IDE, Wing IDE 및 Spyder는 모두 명령에서 값 표시를 분리 할 수있는 시각적 디버거를 가지고 있습니다.


비주얼 디버거는 일반적으로 콘솔을 통한 디버깅에 비해 매우 느리므로 디버거를 시작하는 데 거의 시간이 걸리지 않습니다.
호기심

1
@Curious 그들은 시작 속도가 느리지 만 특히 제한된 경험을 가진 사람들에게 더 유용합니다.
Steve Barnes

과학적 작업을 위해 나는 Spyder의 디버거를 편리하게 찾습니다. 10x10 매트릭스 디버깅이 CLI에서 실용적이지 않다고 생각합니다
shaunakde
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.