2011-10-27 31 views
12

Tôi muốn chạy pdb, bước qua mã, và tại một số điểm thay đổi giá trị được chỉ bởi một số tên. Vì vậy, tôi có thể muốn thay đổi giá trị được chỉ ra bởi tên 'stationLat'. Nhưng có vẻ như tôi không thể. Dưới đây là ví dụ:Làm cách nào để thay đổi giá trị trong khi gỡ lỗi python bằng pdb?

>>> import extractPercentiles 
>>> import pdb 
>>> pdb.run("extractPercentiles.extractOneStation()") 
> <string>(1)<module>()->None 
(Pdb) s 
--Call-- 
> /scratch/extractPercentiles.py(96)extractOneStation() 
-> def extractOneStation() : 
(Pdb) tbreak 132 
Breakpoint 3 at /scratch/extractPercentiles.py:132 
(Pdb) c 

Deleted breakpoint 3 
> /scratch/extractPercentiles.py(132)extractOneStation() 
-> stationLon = float(stationLoc[3]) 

Vì vậy, bây giờ tôi đang ở một nơi mà tôi muốn thay đổi giá trị của stationlat. Pdb xuất hiện để cho phép tôi đặt stationLat thành giá trị mới, nhưng khi tôi kiểm tra giá trị, nó không thay đổi:

(Pdb) stationLat 
-34.171100000000003 
(Pdb) stationLat = -40 
(Pdb) stationLat 
-34.171100000000003 
(Pdb) !stationLat = -40 
(Pdb) stationLat 
-34.171100000000003 
(Pdb) 

Bạn có thể thấy tôi đã thử sử dụng! là tốt, không thành công.

Sổ tay pdb nói rằng tôi sẽ có thể thay đổi các biến:

Commands rằng debugger không nhận được giả định là báo cáo Python và được thực hiện trong bối cảnh của chương trình đang được gỡ rối. Các câu lệnh Python cũng có thể được đặt trước bằng một dấu chấm than (!). Đây là một cách mạnh mẽ để kiểm tra chương trình đang được sửa lỗi; thậm chí có thể thay đổi biến số hoặc gọi hàm

Đây có phải là câu hỏi về phạm vi không? Là nó để làm với cách tôi đã bắt đầu pdb? Tôi đã thử thành ngữ "pdb.set_trace" được nhúng và tôi nhận được kết quả tương tự.

Cảm ơn bạn đã đọc.

Trả lời

9

Điều này có vẻ là bug in Python 2.6. Bạn có thể làm điều này trong Python 2.7.

+0

Ah! Được rồi cảm ơn. Tôi nghĩ có lẽ tôi phải tháo gỡ tên hoặc sử dụng một số không gian tên đặc biệt. Tôi đã cố gắng đi lên và xuống ngăn xếp khung quá. –

+1

Ồ, tôi sẽ ghi lại rằng cho dự án này, tôi buộc phải làm việc trở lại trong python 2.5.2, mà vẫn còn có lỗi. –

+0

cũng có một số biến nhất định mà bạn không thể gán. như "a" hoặc "b" – dtc

0

Thực tế, giá trị của biến được thay đổi khi bạn chỉ định giá trị mới trong pdb. Nhưng nếu bạn cố gắng đọc biến trong pdb một lần nữa mà không cần chạy mã của bạn, nó có thể đặt lại về giá trị ban đầu.

Nếu bạn quay trở lại mã của mình, bạn sẽ thấy rằng nó sẽ sử dụng giá trị mới của bạn (-40).

Hãy thử điều này:

stationLat = -40 
s # step back into code 
stationLat # should display -40 
Các vấn đề liên quan