[英]How to have a user specify an enum via command line in Python
在cv2軟件包中,有一些枚舉定義為:
aruco.DICT_4X4_50
aruco.DICT_5X5_50
依此類推,映射到0、1、2 ...。 我想編寫一個腳本,用戶在其中通過命令行指定這些枚舉,並且代碼執行了應做的事情,並且想知道是否存在一種優雅的方式來做到這一點。 現在,我有一個解析器來檢查所有可能的枚舉,這是不好的,因為如果枚舉在包中得到更新,我的代碼將無法使用它們。
理想情況下,我只想查看通過命令行提供的“字符串”是否對應於有效的枚舉,然后將其轉發給使用該枚舉的函數。
這是一個最小的示例:
from cv2 import aruco
import sys
def create_board(arucodict):
try:
aruco_dict = aruco.getPredefinedDictionary(arucodict)
except:
print('WRONG')
return None, None
squareLength = 10
markerLength = 7
board = aruco.CharucoBoard_create(4, 4, squareLength, markerLength, aruco_dict)
imboard = board.draw((500, 500),0,1)
arucoParams = aruco.DetectorParameters_create()
return imboard, arucoParams
if __name__=="__main__":
# User specifies the aruco dictionary he wants
# Expects aruco.DICT_4X4_50, or aruco.DICT_5x5_50 etc
arucodict = sys.argv[1]
imb1, ap1 = create_board(arucodict) enter code here
您嘗試過getattr()
嗎? 在這里查看文檔
from enum import IntEnum
class numbers(IntEnum):
zero = 0
one = 1
two = 2
string = "zero" # this would come from sys.argv
try:
value = getattr(numbers, string)
print(value)
except AttributeError:
raise Exception("Not an enum")
這里需要注意的是,用戶只能輸入zero
而不是數字numbers.zero
編輯:
Ethan Furman指出,如果您使用的是Python的enum
包,則可以簡單地使用
value = numbers[string]
而不是getattr(numbers,string)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.