2010-05-08 103 views
2

我不明白這個...嘗試...否則...除了語法錯誤

不能得到這個代碼運行和我不知道爲什麼它是一個語法錯誤。


    try: 
     newT.read() 
     #existingArtist = newT['Exif.Image.Artist'].value 
     #existingKeywords = newT['Xmp.dc.subject'].value 

    except KeyError: 
     print "KeyError" 

    else: 
     #Program will NOT remove existing values 
     newT.read() 
     if existingArtist != "" : 
      newT['Exif.Image.Artist'] = artistString 


     print existingKeywords 

     keywords = os.path.normpath(relativePath).split(os.sep) 
     print keywords 
     newT['Xmp.dc.subject'] = existingKeywords + keywords 

     newT.write() 
    except: 
     print "Cannot write tags to ",filePath 

語法錯誤發生在最後一個「except:」。再次...我不知道爲什麼python會拋出一個語法錯誤(在這個問題上花了大約3小時)。

回答

17

else之後不能有其他excepttry,exceptelse塊不像功能調用或其他代碼 - 你不能只是混合和匹配它們,只要你喜歡。它總是一個特定的順序:

try: 
    # execute some code 
except: 
    # if that code raises an error, go here 
    # (this part is just regular code) 
else: 
    # if the "try" code did not raise an error, go here 
    # (this part is also just regular code) 

如果你想趕上了else塊過程中出現錯誤,你需要另一個try聲明。像這樣:

try: 
    ... 
except: 
    ... 
else: 
    try: 
     ... 
    except: 
     ... 

僅供參考,如果你想趕上了except塊過程中發生錯誤同樣適用 - 這種情況下,你會需要另一個try聲明,就像這樣:

try: 
    ... 
except: 
    try: 
     ... 
    except: 
     ... 
else: 
    ... 
3

閱讀該文檔會給你這句話:

在try ... except語句有一個可選的else子句,其中,如果存在的話,必須遵循所有的條款除外。

將其他移動到您的處理程序的末尾。