이름이 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.