Làm cách nào để thao tác một biến có tên xung đột với các lệnh PDB?


95

Mã của tôi, tốt hơn hay tệ hơn, chứa đầy các biến ký tự đơn (đó là công cụ vật lý, vì vậy những ký tự đó có ý nghĩa), cũng như của NumPy, mà tôi thường tương tác với.

Khi sử dụng trình gỡ lỗi Python, đôi khi tôi muốn xem xét giá trị của, chẳng hạn n,. Tuy nhiên, khi tôi nhấn n<enter>, đó là lệnh PDB (n)ext, có mức độ ưu tiên cao hơn. print nhoạt động xung quanh xem xét nó, nhưng làm thế nào tôi có thể thiết lập nó?


2
Loại quá mức cần thiết nhưng bạn đã thử evalchưa? eval('n = 3')? Có lẽ nó sẽ giúp :)
Paulo Bu

Câu trả lời:


131

Sử dụng dấu chấm than !trước một câu lệnh để chạy câu lệnh:

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)

Các tài liệu nói:

! statement

Thực hiện (một dòng) tuyên bố trong bối cảnh của stack frame hiện hành. Có thể bỏ qua dấu chấm than trừ khi từ đầu tiên của câu lệnh giống với lệnh của trình gỡ lỗi. [...]


1
IMO, nó sẽ thân thiện hơn với người dùng đối với các lệnh yêu cầu! hoặc một số tiền tố như vậy.
user76284

13

Bạn có thể sử dụng dấu chấm phẩy, vì vậy chỉ cần đặt một cái gì đó khác trước nó:

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

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

7
Một giải pháp chức năng, nhưng tôi tin rằng '!' nhà điều hành có ý định giải quyết trường hợp này không.
khủng long

2

Đó không phải là câu trả lời trực tiếp cho câu hỏi của bạn, nhưng nó có thể giúp ích cho bạn: PuDB là một giao diện trực quan dựa trên bảng điều khiển dành cho PDB giúp phân tách các lệnh khỏi thao tác biến theo thiết kế.


Trông có vẻ thú vị; Tôi sẽ phải mất một đâm vào nó khi tôi có thời gian để học
Nick T

-1

Eric IDE, Wing IDE & Spyder để đề cập đến chỉ một số ít đều có trình gỡ lỗi trực quan đáng để thử vì chúng tách biệt hiển thị giá trị khỏi các lệnh.


trình gỡ lỗi trực quan thường rất chậm so với gỡ lỗi thông qua bảng điều khiển, hầu như không mất thời gian để khởi động trình gỡ lỗi.
Tò mò

1
@Curious Chúng khởi động chậm hơn nhưng thường dễ sử dụng hơn, đặc biệt đối với những người có kinh nghiệm hạn chế.
Steve Barnes

Đối với công việc khoa học, tôi thấy trình gỡ lỗi của Spyder hữu ích. Tôi không nghĩ rằng gỡ lỗi ma trận 10x10 là thực tế trên CLI
shaunakde
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.