2010-11-15 24 views
7

Tôi mới dùng ipython và tôi đang cố gắng sử dụng ipython để gỡ lỗi mã của mình. Tôi đã làm:truy cập các biến trong phiên gỡ rối với ipython và% pdb trên

[1]: %pdb 
Automatic pdb calling has been turned ON 

và sau đó

In [2]: %run mycode.py 

và trong các mã, tôi có 1/0 nên nó đặt ra một ngoại lệ và sẽ tự động chuyển sang phiên debug.

ZeroDivisionError: float division 

ipdb> variable 
array([ 0.00704313, -1.34700666, -2.81474391]) 

Vì vậy, tôi có thể truy cập các biến. Nhưng khi tôi làm như sau:

ipdb> b = variable 
*** The specified object '= variable' is not a function or was not found along sys.path. 

Nhưng công trình này:

ipdb> b = self.X 

Trả lời

9

b được sử dụng để thiết lập điểm break. Vì vậy, bất cứ điều gì sau b được dự kiến ​​sẽ là một hàm hoặc số dòng.

Nếu bạn nhập ipdb> help bạn sẽ thấy danh sách đầy đủ các lệnh (từ dành riêng).

Bạn có thể sử dụng, nói, x hoặc y như là một biến:

ipdb> y = variable 

hoặc

ipdb> exec 'b = variable' 
+0

Có cách nào để quá tải lệnh b này không? Trong tên biến ứng dụng b của tôi xảy ra rất nhiều một cách tự nhiên, và nó là một nỗi đau không thể sử dụng nó. – joon

+0

@joon: Có tên biến một chữ thường nói không phải là một thực hành lập trình tốt. Có lẽ đây là vấn đề nên thúc đẩy bạn thay đổi tên biến. Tôi nhận ra rằng có thể khó làm. Trong trường hợp đó bạn có thể thử 'exec 'b = variable''. – unutbu

+2

Tất nhiên. Nó chỉ là ký tự b là sự lựa chọn tự nhiên cho đối tác toán học. Cảm ơn bạn! – joon

0

bạn có thể sử dụng

locals()["b"] = variable 
1

Tôi nghĩ rằng bạn cần phải sử dụng '! ' (pdb documentation): ! tuyên bố Thực hiện câu lệnh (một dòng) trong ngữ cảnh của khung ngăn xếp hiện tại. Dấu chấm than có thể được bỏ qua trừ khi từ đầu tiên của câu lệnh tương tự như lệnh gỡ lỗi. Để đặt biến toàn cục, bạn có thể thêm tiền tố cho lệnh gán với câu lệnh chung trên cùng một dòng, ví dụ:

global list_options; list_options = ['-l'] 
Các vấn đề liên quan