Cách tạo mã Python bằng Flake8

pexels nina hill 9121365 2

Công cụ linting là một tài nguyên quý giá có thể giúp bạn phát hiện lỗi và sự không nhất quán trong mã của mình.


Flake8 là một trong những công cụ linting phổ biến nhất cho Python. Nó xác định các lỗi cú pháp và định dạng trong mã của bạn, cùng với các vấn đề khác như nhập không sử dụng. Nó rất linh hoạt bởi vì, mặc dù nó có các quy tắc mặc định, nhưng bạn có thể thay đổi hoặc thêm chúng để phù hợp với yêu cầu của mình.

Bạn cũng có thể định cấu hình Flake8 để chạy khi bạn lưu các bản cập nhật cho mã của mình bằng Mã VS. Tất cả các tính năng này làm cho nó trở thành một công cụ có giá trị khi viết các chương trình Python.


Cài đặt Flake8

Thực hiện theo các bước bên dưới để cài đặt Flake8 trên môi trường phát triển của bạn. Bạn có thể cần cài đặt Pip trên máy của mình trước.

  1. Chạy lệnh bên dưới trong thiết bị đầu cuối của bạn để cài đặt Flake8:
     pip install flake8
  2. Xác minh rằng Flake8 đã được cài đặt bằng cách chạy lệnh sau:
     flake8 --version
  3. Nếu Flake8 được cài đặt đúng cách, bạn sẽ thấy đầu ra tương tự như sau:
     4.0.1 (mccabe: 0.6.1, pycodestyle: 2.8.0, pyflakes: 2.4.0) CPython 3.9.13 on
    Linux

Khi bạn đã cài đặt thành công Flake8, bạn có thể bắt đầu sử dụng nó.

Sử dụng Flake8 để phân tích mã Python

Để hiểu cách sử dụng Flake8, hãy bắt đầu với đoạn mã sau. Nó có một vài lỗi cố ý. Sao chép nó vào một tập tin có tên lời chào.py.

 def greeting(name):
    print("Hello, " + name)
greeting("Alice")
 greeting("Bob")


Chạy Flake8 trên một tệp

Cú pháp để chạy Flake8 trên một tệp như sau.

 flake8 path/to/file.py

Trong ví dụ này, điều hướng đến thư mục chứa tệp greting.py và chạy lệnh sau.

 flake8 greeting.py

Flake8 sẽ trả về thông báo sau cho biết có lỗi thụt lề.

 greeting.py:5:1: E999 IndentationError: unexpected indent

Kết quả này chỉ ra rằng dòng 5 được thụt vào một cách không cần thiết. Để khắc phục lỗi thụt đầu dòng này, bạn cần bỏ khoảng trắng ở đầu dòng này.

 def greeting(name):
    print("Hello, " + name)
greeting("Alice")
greeting("Bob")


Bây giờ khi bạn chạy Flake8, bạn sẽ nhận được các cảnh báo sau.

 greeting.py:4:1: E305 expected 2 blank lines after class or function definition, found 1
greeting.py:5:16: W292 no newline at end of file

Đầu ra này chỉ ra các vấn đề sau:

  • Ở dòng 4, lẽ ra phải có hai dòng trống sau định nghĩa hàm chào, nhưng chỉ có một dòng.
  • Trên dòng 5, sẽ có một dòng mới ở cuối tệp.

Sau khi bạn khắc phục những sự cố này, flake8 sẽ không trả lại bất kỳ tin nhắn nào.

Cho đến nay, chúng tôi chỉ phân tích một tệp nhưng trong hầu hết các trường hợp, bạn sẽ muốn phân tích nhiều tệp.

Chạy Flake8 trên nhiều tệp

Giả sử bạn có một cuộc gọi khác test_greeting.py có chứa đoạn mã sau:

 from greeting import greeting
def test_greet():
    assert greeting("Alice") == "Hello, Alice!"

Để phân tích hai tệp này, hãy chạy lệnh sau.

 flake8 greeting.py test_greeting.py

Phương pháp này hoạt động nhưng nếu bạn có nhiều hơn hai tệp, việc nhập tên tệp có thể mệt mỏi và dễ bị lỗi.

Sẽ hiệu quả hơn khi sử dụng lệnh sau để phân tích tất cả các tệp trong thư mục hiện tại:

 flake8 .

Hiểu lỗi và cảnh báo Flake8

Flake8 báo cáo hai loại vấn đề:

  • Lỗi: Lỗi cho biết vấn đề về cấu trúc hoặc cú pháp ngăn mã của bạn chạy giống như lỗi thụt lề trong ví dụ hello.py.
  • Cảnh báo: Cảnh báo cho biết một vấn đề tiềm ẩn hoặc vi phạm các nguyên tắc về kiểu PEP 8 như cảnh báo “không có dòng mới ở cuối tệp” từ ví dụ hello.py.

Một số lỗi và cảnh báo phổ biến là:

  • E101: thụt lề chứa hỗn hợp dấu cách và tab.
  • E302: mong đợi 2 dòng trống, tìm thấy 0.
  • E999 IndentationError: thụt lề không mong muốn.
  • W291: khoảng trắng ở cuối.
  • E501: dòng quá dài (tối đa 79 ký tự).
  • F401: mô-đun đã nhập nhưng chưa sử dụng.

Khi bạn chạy Flake8, nó sẽ xuất ra một thông báo như thông báo được hiển thị ở trên và số dòng cũng như mã vị trí tham chiếu thông báo. Điều này giúp bạn biết chính xác mã của bạn có vấn đề ở đâu, giúp bạn tiết kiệm thời gian gỡ lỗi.

Định cấu hình Flake8

Đối với một số dự án, các quy tắc của Flake8 có thể quá cứng nhắc. Trong những trường hợp này, Flake8 cho phép bạn định cấu hình và điều chỉnh hành vi của nó để phù hợp với yêu cầu của bạn.

Bạn có thể cung cấp các tùy chọn cấu hình như:

  • Bỏ qua các lỗi hoặc cảnh báo cụ thể.
  • Đặt độ dài dòng tối đa.
  • Chỉ định các quy tắc bổ sung.

Để chứng minh, hãy tạo một tệp cấu hình có tên setup.cfg. Bạn cũng có thể thêm các tùy chọn cấu hình vào tệp có tên tox.ini hoặc .flake8.

Trong tệp này, hãy bắt đầu bằng cách tạo phần flake8 như sau:

 [flake8]

Sau đó thêm các tùy chọn bạn muốn cấu hình:

 [flake8]
max-line-length = 100
ignore = F401

Trong ví dụ này, max-line-length = 100 yêu cầu Flake8 đưa ra cảnh báo cho bất kỳ dòng nào trong tệp mã nguồn của bạn có độ dài vượt quá 100 ký tự. bỏ qua = F401 yêu cầu Flake8 bỏ qua các lỗi liên quan đến việc nhập không sử dụng.

Bạn không cần thêm các tùy chọn này vào tệp cấu hình vì bạn có thể gọi chỉ định chúng trên dòng lệnh như sau:

 flake8 --ignore E203 --max-line-length 100

Sử dụng tệp cấu hình là cách tiếp cận tốt nhất vì bạn không cần chỉ định các tùy chọn giống nhau mỗi khi sử dụng flake8.

Sử dụng Flake8 trong Mã VS

Nếu bạn đang sử dụng Mã VS để viết ứng dụng Python, bạn có thể sử dụng tiện ích mở rộng flake8 để tách các tệp Python khi bạn nhập.

Trước tiên, bạn cần cài đặt tiện ích mở rộng flake8 từ thị trường VS Code. Tiếp theo, để định cấu hình, hãy mở cài đặt Mã VS, sau đó tìm kiếm “python.linting.flake8Enabled” và bật linting với flake8.

Bây giờ, bạn sẽ thấy các lỗi và cảnh báo được tô sáng trong mã của mình bằng một dòng nguệch ngoạc khi bạn viết mã. Di chuột qua văn bản được đánh dấu sẽ hiển thị thông báo giải thích sự cố và đề xuất các cách khắc phục có thể có.

Các IDE Python khác như Pycharm cũng có các tiện ích mở rộng Flake8 mà bạn có thể định cấu hình để đơn giản hóa quy trình linting.

Tại sao bạn nên sử dụng một Linter?

Khi bạn viết mã, bạn có thể đưa ra các lỗi và sự không nhất quán khiến ứng dụng của bạn bị lỗi hoặc gặp vấn đề về hiệu suất. Một kẻ nói dối như Flake8 cho phép bạn phát hiện trước một số vấn đề này, giúp bạn viết mã sạch hơn. Tích hợp nó vào quy trình phát triển của bạn là rất quan trọng.

Bạn có thể làm điều này bằng cách sử dụng nó trong trình soạn thảo văn bản hoặc IDE của bạn và tích hợp nó vào kênh tích hợp liên tục của bạn để tự động kiểm tra mã của bạn để tìm lỗi và cảnh báo trước khi bạn hợp nhất nó với nhánh chính của mình.

Previous Post
Next Post

post written by: