2014-06-16 44 views
0

我試圖通過​​傳遞一些日期到我的劇本,但不知何故,它總是會產生以下錯誤:Argparse:無法識別的說法

error: unrecognized arguments: -startdate -enddate -timeofday 

我的代碼如下:

import argparse 

parser = argparse.ArgumentParser(description='This program downloads webcam images') 
parser.add_argument('‐startdate', type=str, help='startdate given as:dd.mm.YYYY') 
parser.add_argument('‐enddate', type=str, help='enddate given as:dd.mm.YYYY') 
parser.add_argument('‐timeofday', type=str, help='time of day as:"HH:MM"') 
args = parser.parse_args() 
print args.startdate 
print args.enddate 

我已經嘗試使用連字符而不是點作爲分隔符,以及「真實」字符串而不是數字。沒什麼幫助。有任何想法嗎?謝謝!

+2

我覺得長參數需要兩個破折號 - 單短線是單字符的參數。 – ThiefMaster

+1

@ThiefMaster:不會,單一的破折號就好了。假設它是一個實際的ASCII短劃線。 –

回答

7

您使用了錯誤的字符:

>>> parser = argparse.ArgumentParser(description='This program downloads webcam images') 
>>> parser.add_argument('‐startdate', type=str, help='startdate given as:dd.mm.YYYY') 
_StoreAction(option_strings=[], dest='\xe2\x80\x90startdate', nargs=None, const=None, default=None, type=<type 'str'>, choices=None, help='startdate given as:dd.mm.YYYY', metavar=None) 

注意dest值有!這是UTF-8的U+2010 HYPHEN;改爲使用ASCII - minus character。由於該字符串不以parser.prefix_chars開頭,它甚至不被視爲可選參數,而是作爲位置。因此,option_strings也是空的。幫助輸出也告訴你:

>>> parser.print_help() 
usage: [-h] ‐startdate 

This program downloads webcam images 

positional arguments: 
    ‐startdate startdate given as:dd.mm.YYYY 

optional arguments: 
    -h, --help show this help message and exit 

這是一個位置(必需)參數。

一般來說,確保你沒有使用文字處理器來編寫代碼;最有可能你的簡單ASCII -破折號被你的編輯器取代看中 HYPHEN字符(注意它如何縮短)。這些編輯也會用更多風格的版本替換引號和其他標點符號。

如果我使用一個普通的ASCII減號工作的事情就好了:

>>> parser = argparse.ArgumentParser(description='This program downloads webcam images') 
>>> parser.add_argument('-startdate', type=str, help='startdate given as:dd.mm.YYYY') 
_StoreAction(option_strings=['-startdate'], dest='startdate', nargs=None, const=None, default=None, type=<type 'str'>, choices=None, help='startdate given as:dd.mm.YYYY', metavar=None) 
>>> parser.print_help() 
usage: [-h] [-startdate STARTDATE] 

This program downloads webcam images 

optional arguments: 
    -h, --help   show this help message and exit 
    -startdate STARTDATE startdate given as:dd.mm.YYYY 
+0

此外,應避免將源代碼編碼頭像'# - * - coding:utf-8 - * - '添加到*假設*只包含ASCII的源文件中,因爲它們掩碼正是這種類型的錯誤。 –

+0

@LukasGraf:這對Python 3的源代碼沒有太大的幫助.. –

+0

沒錯,但在這裏顯然不是這樣的 - 由於源代碼中包含非ASCII字符,OP最有可能遇到'SyntaxError',固定「它通過添加一個編碼聲明。否則,他甚至無法得到「無法識別的參數」錯誤。 –