Thứ năm, 27/04/2017 | 00:00 GMT+7

Cách gỡ lỗi Python bằng control panel tương tác

Gỡ lỗi là một phần của quy trình phát triển phần mềm, nơi các lập trình viên tìm kiếm và sau đó giải quyết các vấn đề ngăn phần mềm chạy chính xác.

Một công cụ hữu ích và nhanh chóng để gỡ lỗi là mô-đun code Python vì nó được dùng để mô phỏng trình thông dịch tương tác. Mô-đun cũng cung cấp cơ hội để bạn thử nghiệm với mã mà bạn viết bằng Python.

Hiểu module code

Thay vì thực hiện từng bước mã với trình gỡ lỗi, bạn có thể thêm module code vào chương trình Python của bạn để hướng dẫn chương trình ngừng thực thi và chuyển sang chế độ tương tác để kiểm tra cách mã của bạn đang hoạt động. Mô-đun code là một phần của thư viện chuẩn Python.

Điều này rất hữu ích vì bạn có thể sử dụng trình thông dịch mà không phải hy sinh tính phức tạp và tính lâu dài mà các file lập trình có thể cung cấp. Thông qua việc sử dụng module code bạn có thể tránh sử dụng các câu print() xuyên suốt mã của bạn như một hình thức gỡ lỗi, có thể trở nên khó sử dụng theo thời gian.

Để sử dụng module như một phương pháp gỡ lỗi, bạn có thể sử dụng hàm interact() của module , hàm này sẽ dừng thực thi chương trình tại thời điểm nó được gọi và cung cấp cho bạn một console tương tác để bạn có thể kiểm tra trạng thái hiện tại của chương trình của bạn.

Hàm với các tham số có thể có của nó như sau:

code.interact(banner=None, readfunc=None, local=None, exitmsg=None) 

Hàm này chạy một vòng lặp read-eval-print và tạo một đối tượng của lớp InteractiveConsole , lớp này mô phỏng hành vi của trình thông dịch Python tương tác.

Các thông số tùy chọn như sau:

  • banner có thể được đặt thành một chuỗi , để bạn có thể gắn cờ nơi trình thông dịch chạy
  • readfunc được dùng làm phương thức InteractiveConsole.raw_input()
  • local sẽ đặt không gian tên mặc định cho vòng lặp thông dịch
  • exitmsg có thể được đặt thành một chuỗi để lưu ý nơi trình thông dịch kết thúc

Với tham số local , bạn có thể sử dụng, ví dụ:

  • local=locals() cho không gian tên local
  • local=globals() cho một không gian tên chung
  • local=dict(globals(), **locals()) để sử dụng cả không gian tên chung và không gian tên local hiện tại

Lưu ý tham số exitmsg là mới đối với Python 3.6, vì vậy nếu bạn đang sử dụng version Python cũ hơn, hãy cập nhật nó hoặc bỏ tham số exitmsg .

Bạn có thể đặt hàm interact() ở bất cứ đâu bạn muốn trong chương trình của bạn để chạy trình thông dịch tương tác trong mã.

Làm việc với Mô-đun code

Hãy xem xét điều này trong ngữ cảnh của một chương trình số dư account ngân hàng được gọi là balances.py . Ta sẽ đặt tham số local locals() để đặt không gian tên thành local.

balances.py
# Import code module import code  bal_a = 2324 bal_b = 0 bal_c = 409 bal_d = -2  account_balances = [bal_a, bal_b, bal_c, bal_d]   def display_bal():     for balance in account_balances:         if balance < 0:             print("Account balance of {} is below 0; add funds now."                   .format(balance))          elif balance == 0:             print("Account balance of {} is equal to 0; add funds soon."                   .format(balance))          else:             print("Account balance of {} is above 0.".format(balance))  # Use interact() function to start the interpreter with local namespace code.interact(local=locals())  display_bal()  

Ta đã sử dụng hàm code.interact() với tham số local=locals() để sử dụng không gian tên local làm mặc định trong vòng lặp thông dịch.

Hãy chạy chương trình ở trên, sử dụng lệnh python3 nếu ta không ở trong môi trường ảo hoặc lệnh python nếu ta :

  • python balances.py

Khi ta chạy chương trình, ban đầu ta sẽ nhận được kết quả sau:

Python 3.5.2 (default, Nov 17 2016, 17:05:23)  [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>>  

Con trỏ của bạn sẽ được đặt ở cuối dòng >>> , giống như nó sẽ ở trong shell tương tác Python.

Từ đây, bạn có thể thực hiện lệnh gọi để in các biến, hàm, v.v.:

>>> print(bal_c) 409 >>> print(account_balances) [2324, 0, 409, -2] >>> print(display_bal()) Account balance of 2324 is 0 or above. Account balance of 0 is equal to 0, add funds soon. Account balance of 409 is 0 or above. Account balance of -2 is below 0, add funds now. None >>> print(display_bal) <function display_bal at 0x104b80f28> >>>  

Ta thấy rằng, bằng cách sử dụng không gian tên local , ta có thể in các biến và gọi hàm. Lời gọi print() cuối cùng hiển thị vị trí của hàm display_bal trong bộ nhớ máy tính.

Khi thấy ổn với những gì bạn có thể kiểm tra khi làm việc với trình thông dịch, bạn có thể nhấn CTRL + D đối với hệ thống dựa trên * nix hoặc CTRL + Z đối với hệ thống dựa trên Windows để rời khỏi console và tiếp tục thực hiện chương trình.

Nếu bạn muốn rời khỏi console mà không chạy phần còn lại của chương trình, bạn có thể thực hiện bằng cách gõ lệnh quit() và chương trình sẽ bị hủy bỏ.

Để tận dụng các tham số bannerexitmsg , ta có thể làm như sau:

balances.py
... # Use interact() function to start the interpreter code.interact(banner="Start", local=locals(), exitmsg="End")  display_bal() 

Khi ta chạy chương trình, ta sẽ nhận được kết quả sau khi ta chạy chương trình:

Start >>>  

Sử dụng tham số banner có thể cho phép bạn cài đặt nhiều điểm trong mã của bạn và cung cấp cho bạn khả năng xác định chúng. Ví dụ: bạn có thể có một banner in "In [for-loop](https://www.digitalocean.com/community/tutorials/how-to-construct-for-loops-in-python-3)" với exitmsg in "Out of for-loop" , vì vậy bạn có thể biết chính xác vị trí của bạn trong mã.

Từ đây, ta có thể sử dụng trình thông dịch như bình thường. Khi ta gõ CTRL + D để thoát trình thông dịch, ta sẽ nhận được thông báo thoát và hàm sẽ chạy:

End Account balance of 2324 is 0 or above. Account balance of 0 is equal to 0, add funds soon. Account balance of 409 is 0 or above. Account balance of -2 is below 0, add funds now. 

Chương trình hiện đã chạy đầy đủ sau phiên tương tác.

Khi bạn đã hoàn tất việc sử dụng module code để gỡ lỗi mã của bạn , bạn nên xóa các hàm code và câu lệnh nhập để chương trình của bạn chạy như bình thường. Mô-đun code cung cấp một tiện ích, vì vậy khi bạn đã hoàn tất, điều quan trọng là phải tự dọn dẹp.

Kết luận

Việc sử dụng module code để chạy console tương tác có thể cho phép bạn xem mã đang làm gì ở cấp độ chi tiết để hiểu hành vi của nó và áp dụng các thay đổi khi cần thiết. Để đọc thêm về nó, bạn có thể đọc tài liệu chính thức của module code .

Để tìm hiểu thêm về các phương pháp khác mà bạn có thể sử dụng để gỡ lỗi mã Python của bạn , hãy đọc hướng dẫn của ta về cách sử dụng pdb trình gỡ lỗi Python và hướng dẫn của ta về cách sử dụng ghi log .


Tags:

Các tin liên quan

Cách sử dụng trình gỡ lỗi Python
2017-04-25
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên CentOS 7
2017-04-20
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên Debian 8
2017-04-20
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên CentOS 7
2017-04-20
Cách áp dụng tính đa hình cho các lớp trong Python 3
2017-04-13
Hướng dẫn dự báo chuỗi thời gian với prophet bằng Python 3
2017-04-04
Hiểu các biến lớp và phiên bản trong Python 3
2017-03-27
Hướng dẫn Dự báo chuỗi thời gian với ARIMA bằng Python 3
2017-03-23
Cách tạo lớp và xác định đối tượng trong Python 3
2017-03-17
Hướng dẫn về image hóa chuỗi thời gian với Python 3
2017-03-14