2010-05-08 101 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子句,其中,如果存在的话,必须遵循所有的条款除外。

将其他移动到您的处理程序的末尾。