2012-04-02 26 views
30

Tôi đang cố gắng sử dụng phân tích cú pháp luận để phân tích một 3D phối hợp để tôi có thể sử dụngPython danh sách đối số phân tích cú pháp của danh sách hoặc tuple của tuples

--cord 1,2,3 2,4,6 3,6,9 

và nhận

((1,2,3),(2,4,6),(3,6,9)) 

nỗ lực của tôi là

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('--cord', help="Coordinate", dest="cord", type=tuple, nargs=3) 
args = parser.parse_args(["--cord","1,2,3","2,4,6","3,6,9"]) 

vars(args) 
{'cord': [('1', ',', '2', ',', '3'), 
    ('2', ',', '4', ',', '6'), 
    ('3', ',', '6', ',', '9')]} 

Thay thế dấu phẩy sẽ là gì?

+0

+1 để hiển thị nỗ lực của bạn và sử dụng chuẩn lib thay vì phát minh lại – bernie

Trả lời

44

Bạn có thể thêm type của riêng mình. Điều này cũng cho phép xác thực bổ sung, ví dụ:

def coords(s): 
    try: 
     x, y, z = map(int, s.split(',')) 
     return x, y, z 
    except: 
     raise argparse.ArgumentTypeError("Coordinates must be x,y,z") 


parser.add_argument('--cord', help="Coordinate", dest="cord", type=coords, nargs=3) 
+0

+1 Cảm ơn! Đã thay đổi mức tăng thành TypeError. Cảm ơn câu trả lời! – jdborg