2014-09-21 48 views
0

這是我的代碼。它是返回一個語法錯誤使用列表中的值使用eval函數的問題

def format_date(): 
    month_abrv = ['Jan','Feb','Mar','Apr','May','Jun','Jul', 
        'Aug','Sep','Oct','Nov','Dec'] 
    print('''This program takes an input in the format MM/DD/YYYY(ex:09/23/2014) 
and outputs date in format DD Mth, YYYY (ex: 23 Sep, 2014)''') 

    date_string = input('\nInput date in format MM/DD/YYYY ') 
    date_list = date_string.split('/') 

    date_list[0] = eval(date_list[0]) 

format_date() 

以下是錯誤

Traceback (most recent call last): 
    File "C:/Python34/Python ICS 140/FormatDate.py", line 16, in <module> 
    format_date() 
    File "C:/Python34/Python ICS 140/FormatDate.py", line 14, in format_date 
    date_list[0] = eval(date_list[0]) 
    File "<string>", line 1 
    09 
    ^
SyntaxError: invalid token 
+3

*爲什麼*你想要使用'eval'而不是['datetime.strptime'](https://docs.python.org/2/library/datetime.html#datetime.datetime.strptime)? – 2014-09-21 15:40:19

+0

認識到python試圖讀取09作爲八進制值而不是十進制值。關於如何將任何小於10的數字(即09,08,07 ...)更改爲9,8,7這一段代碼的想法? – Efie 2014-09-21 15:47:15

+0

@LukasGraf我正在介紹python課程,我們還沒有使用datetime.strptime。有沒有辦法做到這一點,而不使用該功能? – Efie 2014-09-21 15:48:00

回答

0

做多一點挖,我發現了Python解釋數字開頭0爲八進制數字後,最後EVAL線。在這種情況下使用int()函數將'09'更改爲9。

+0

Btw這隻適用於Python 2.x,而不是Python 3.x. – 2014-09-21 16:28:04

+0

我有和只有Python 3.4.1。 3.x確定它不同嗎? – Efie 2014-09-23 00:14:41

+0

您可以非常輕鬆地進行測試,並將測試結果包含在答案中。在2.7上輸入「033」到交互式解釋器租借者「27」中,即它被解釋爲八進制。在3.3上,它會因'SyntaxError'失敗。我手邊沒有3.4,但如果你是對的,那麼3.4會出於兼容目的介紹它。 – 2014-09-23 11:29:17