2014-12-23 32 views
2

我從來沒有用過Python,而且總共是n00b,但我試圖在Windows上使用Boto庫和Python 3在py上執行腳本。 。 這是腳本產生錯誤的部分:無法編輯的類型:無類型()> str()

latest_date = None 
    for key in bucket.list(prefix="meta-review/"): 
     done_file_match = re.match("^meta-review/([^/]+)/done$", key.key) 
     if done_file_match: 
      date = done_file_match.group(1) 
      latest_date = max(date, latest_date) 

    assert latest_date is not None, "No complete dump folder found!" 

但是當我使用命令行我收到此錯誤信息作爲輸出執行腳本:

INFO:root:Connecting to Amazon S3 
INFO:root:Looking for latest complete dump 
Traceback (most recent call last): 
    File "*******.py", line 78, in <module> 
    download_latest(aws_access_key, aws_secret_key, args.dest_folder) 
    File "*******.py", line 41, in download_latest 
    latest_date = max(date, latest_date) 
TypeError: unorderable types: NoneType() > str() 

(顯然星號是隱私)。 任何人都可以告訴我在哪裏可以找到解決方案? 我注意到,有類似的錯誤已經報告,但我不明白要改變什麼。

任何想法?

+0

你無法將'None'與'str'進行比較。 'max()'進行比較。就這樣。 – glglgl

+2

順便說一句,什麼可以私人關於文件名? – glglgl

+2

這是濫用'assert' –

回答

4

最初latest_dateNone,這樣別人提到max不能工作。

所以,改變

latest_date = max(date, latest_date) 

latest_date = date if latest_date is None else max(date, latest_date) 

請注意比較字符串之間,這些字符串最好是在一個適當的可比的日期格式,e.g '20141223「等。

+0

我已經這樣做,現在它的工作!謝謝Alex! –

0

你問MAX()來比較兩種不同類型的(無和一個字符串)

1

使用Python2,可以將字符串與None進行比較,但在Python3中進行了更改(有關詳細信息,請參見What’s New In Python 3.0: Ordering Comparisons)。

解決您的問題,最簡單的方法是初始化latest_date爲空字符串(總是比較小於任何非空字符串),然後做一個長度測試你的斷言語句:

latest_date = "" 
... 

     latest_date = max(date, latest_date) 

assert len(latest_date), "No complete dump folder found!" 
+0

這也適用,它可能會比我建議的if/else表達式讀得更好(雖然它不那麼明確)。 –

相關問題