2016-02-26 91 views
0

我有一個簡單的代碼,需要至少1個參數。現在,我的代碼格式看起來是這樣的:參數檢查最佳實踐

import modules 

# argparse stuff 
parser = argparse.ArgumentParser() 
parser.add_argument(-m) 
parser.add_argument(-u) 
args = parser.parse_args() 

# check the number of arguments 
if len(sys.argv) > 3: 
sys.exit() 

if len(sys.argv) == 1: 
sys.exit() 

class Program: 
     def A(): 
     def B(): 
     def C(): 

if __name__ == '__main__': 
    try: 
     Program() 

的代碼按預期工作,但我想知道我怎麼可以重寫我的代碼是「Python化」。我是否在「如果名稱」聲明下放置了參數檢查?如果是這樣,怎麼樣?謝謝。

回答

1

我會建議不要看sys.argv,特別是如果你已經使用CLI解析庫。

Argprase有一堆強制執行要求的方法,但如果這些方法都不符合您的需求,則可以查看您的「參數」對象。

就個人而言,我建議不要在該文件的全局範圍內運行函數,如parse_args()。相反,我會建議(至少),只是你包裹在一個名爲主要功能已經得到了什麼,然後調用「main()的」後「如果__name__ ==‘__main__’

Argparse例子:

如果'-M' 和 '-u' 是互斥的

parser = argparse.ArgumentParser() 
group = parser.add_mutually_exclusive_group(required=True) 
group.add_argument('-m') 
group.add_argument('-u') 

args = parser.parse_args() # will output a error message if '-m' or '-u' isn't supplied 

如果特定ARG總是需要

parser = argparse.ArgumentParser() 
parser.add_argument('-m', required=True) # must always give '-m' 

或者只是在看 'ARGS' 對象

parser = argparse.ArgumentParser() 
parser.add_argument('-m') 
parser.add_argument('-u') 

args = parser.parse_args() 
if not (args.m or args.u): 
    sys.exit(1) # should exit non-zero on failures 

主要包裝例如:

import modules 

class Program: 
     def A(): 
     def B(): 
     def C(): 

def main(): 
    parser = argparse.ArgumentParser() 
    parser.add_argument(-m) 
    parser.add_argument(-u) 
    args = parser.parse_args() 

    if not (args.m or args.u): 
     sys.exit(1) 

    try: 
     Program() 
    except SomeException: 
     # handle it 
     pass # b/c I don't know what you need here 

if __name__ == '__main__': 
    main() 
+0

正是我所需要的信息。謝謝! – gratchie

0

檢查​​後的參數個數沒有多大意義。如果出現錯誤,​​將處理該錯誤,因此您不必複製它。

請在if __name__檢查後放置參數檢查 - 以防萬一要導入模塊而不執行。

否則,它只是標準代碼,正如您在​​文檔中看到的那樣。沒有什麼問題。