[MẸO] Trình phân tích đối số Python - Những thực hành xấu

By khoanc, at: 11:28 Ngày 18 tháng 10 năm 2024

Thời gian đọc ước tính: __READING_TIME__ minutes

[TIPS] Python Argument Parser - Bad Practices
[TIPS] Python Argument Parser - Bad Practices

Các Thực Hành Xấu Khi Truyền Đối Số trong Script Python

 

1. Sử dụng sys.argv Trực Tiếp

import sys

def main():
    if len(sys.argv) < 3:
        print("Không đủ đối số!")
        return
    
    arg1 = sys.argv[1]
    arg2 = sys.argv[2]
    
    if arg1 == 'option1':
        print(f"Đã chọn Option 1 với giá trị {arg2}")
    elif arg1 == 'option2':
        print(f"Đã chọn Option 2 với giá trị {arg2}")
    else:
        print("Option không xác định!")

if __name__ == "__main__":
    main()


Thực Hành Xấu: Sử dụng sys.argv trực tiếp để phân tích đối số có thể dễ dẫn đến lỗi và khó bảo trì.

Cách Khắc Phục: Sử dụng module argparse để phân tích đối số. Nó cung cấp cách xử lý đối số dòng lệnh mạnh mẽ và thân thiện với người dùng hơn.

import argparse

def main():
    parser = argparse.ArgumentParser(description="Một trình phân tích đối số mẫu.")
    parser.add_argument('arg1', type=str, help="Đối số thứ nhất")
    parser.add_argument('arg2', type=str, help="Đối số thứ hai")
    args = parser.parse_args()
    
    if args.arg1 == 'option1':
        print(f"Đã chọn Option 1 với giá trị {args.arg2}")
    elif args.arg1 == 'option2':
        print(f"Đã chọn Option 2 với giá trị {args.arg2}")
    else:
        print("Option không xác định!")

if __name__ == "__main__":
    main()

 

2. Không Có Thông Báo Sử Dụng hoặc Trợ Giúp

import sys

def main():
    if len(sys.argv) < 3:
        print("Không đủ đối số!")
        return
    
    arg1 = sys.argv[1]
    arg2 = sys.argv[2]
    
    if arg1 == 'option1':
        print(f"Đã chọn Option 1 với giá trị {arg2}")
    elif arg1 == 'option2':
        print(f"Đã chọn Option 2 với giá trị {arg2}")
    else:
        print("Option không xác định!")

if __name__ == "__main__":
    main()


Thực Hành Xấu: Không cung cấp thông báo sử dụng hoặc trợ giúp khiến người dùng khó hiểu cách sử dụng script.

Cách Khắc Phục: Sử dụng module argparse, tự động cung cấp thông báo trợ giúp và sử dụng.

import argparse

def main():
    parser = argparse.ArgumentParser(description="Một trình phân tích đối số mẫu.")
    parser.add_argument('arg1', type=str, help="Đối số thứ nhất")
    parser.add_argument('arg2', type=str, help="Đối số thứ hai")
    args = parser.parse_args()
    
    if args.arg1 == 'option1':
        print(f"Đã chọn Option 1 với giá trị {args.arg2}")
    elif args.arg1 == 'option2':
        print(f"Đã chọn Option 2 với giá trị {args.arg2}")
    else:
        print("Option không xác định!")

if __name__ == "__main__":
    main()

 

Không Xác Thực Đối Số

import sys

def main():
    if len(sys.argv) < 3:
        print("Không đủ đối số!")
        return
    
    arg1 = sys.argv[1]
    arg2 = sys.argv[2]
    
    if arg1 == 'option1':
        print(f"Đã chọn Option 1 với giá trị {arg2}")
    elif arg1 == 'option2':
        print(f"Đã chọn Option 2 với giá trị {arg2}")
    else:
        print("Option không xác định!")

if __name__ == "__main__":
    main()


Thực Hành Xấu: Không xác thực đối số có thể dẫn đến lỗi thời gian chạy hoặc hành vi không mong muốn.

Cách Khắc Phục: Sử dụng argparse để chỉ định kiểu đối số và xác thực chúng cho phù hợp.

import argparse

def main():
    parser = argparse.ArgumentParser(description="Một trình phân tích đối số mẫu.")
    parser.add_argument('arg1', type=str, choices=['option1', 'option2'], help="Đối số thứ nhất")
    parser.add_argument('arg2', type=str, help="Đối số thứ hai")
    args = parser.parse_args()
    
    if args.arg1 == 'option1':
        print(f"Đã chọn Option 1 với giá trị {args.arg2}")
    elif args.arg1 == 'option2':
        print(f"Đã chọn Option 2 với giá trị {args.arg2}")

if __name__ == "__main__":
    main()

 

Bỏ Qua Trường Hợp Ngoại Lệ

import sys

def main():
    if len(sys.argv) < 3:
        print("Không đủ đối số!")
        return
    
    arg1 = sys.argv[1]
    arg2 = sys.argv[2]
    
    if arg1 == 'option1':
        print(f"Đã chọn Option 1 với giá trị {arg2}")
    elif arg1 == 'option2':
        print(f"Đã chọn Option 2 với giá trị {arg2}")
    else:
        print("Option không xác định!")

if __name__ == "__main__":
    main()


Thực Hành Xấu: Không xử lý các trường hợp ngoại lệ như thiếu đối số, kiểu dữ liệu không chính xác hoặc giá trị không hợp lệ.

Cách Khắc Phục: Sử dụng các tính năng của argparse như giá trị mặc định, kiểm tra kiểu và đối số bắt buộc để xử lý các trường hợp ngoại lệ.

import argparse

def main():
    parser = argparse.ArgumentParser(description="Một trình phân tích đối số mẫu.")
    parser.add_argument('arg1', type=str, choices=['option1', 'option2'], help="Đối số thứ nhất")
    parser.add_argument('arg2', type=str, help="Đối số thứ hai")
    parser.add_argument('--optional', type=int, default=0, help="Một đối số tùy chọn")
    args = parser.parse_args()
    
    if args.arg1 == 'option1':
        print(f"Đã chọn Option 1 với giá trị {args.arg2} và tùy chọn {args.optional}")
    elif args.arg1 == 'option2':
        print(f"Đã chọn Option 2 với giá trị {args.arg2} và tùy chọn {args.optional}")

if __name__ == "__main__":
    main()

 

Đặt Tên Đối Số Kém

import sys

def main():
    if len(sys.argv) < 3:
        print("Không đủ đối số!")
        return
    
    arg1 = sys.argv[1]
    arg2 = sys.argv[2]
    
    if arg1 == 'option1':
        print(f"Đã chọn Option 1 với giá trị {arg2}")
    elif arg1 == 'option2':
        print(f"Đã chọn Option 2 với giá trị {arg2}")
    else:
        print("Option không xác định!")

if __name__ == "__main__":
    main()


Thực Hành Xấu: Sử dụng tên đối số không mô tả hoặc mơ hồ có thể gây nhầm lẫn cho người dùng.

Cách Khắc Phục: Sử dụng tên đối số rõ ràng và mô tả mục đích của chúng.

import argparse

def main():
    parser = argparse.ArgumentParser(description="Một trình phân tích đối số mẫu.")
    parser.add_argument('command', type=str, choices=['start', 'stop'], help="Lệnh cần thực thi")
    parser.add_argument('value', type=str, help="Giá trị liên quan đến lệnh")
    args = parser.parse_args()
    
    if args.command == 'start':
        print(f"Bắt đầu với giá trị {args.value}")
    elif args.command == 'stop':
        print(f"Dừng với giá trị {args.value}")

if __name__ == "__main__":
    main()

 

Tag list:
- args
- Tips
- Tips and Tricks
- parse args python
- args parsers python
- args parsers
- args parse problem
- Args parsers issues
- Argument passing bad practices

Liên quan

Python Learning

Đọc thêm
Experience Outsourcing

Đọc thêm
Python Learning

Đọc thêm
Theo dõi

Theo dõi bản tin của chúng tôi và không bao giờ bỏ lỡ những tin tức mới nhất.