tags:

views:

70

answers:

3

I can't understand this...

Cannot get this code to run and I've no idea why it is a syntax error.


    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

Syntax error occurs on the last "except:". Again...I have no idea why python is throwing a syntax error (spent ~3hrs on this problem).

+8  A: 

You can't have another except after the else. The try, except, and else blocks aren't like function calls or other code - you can't just mix and match them as you like. It's always a specific sequence:

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)

If you want to catch an error that occurs during the else block, you'll need another try statement. Like so:

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

FYI, the same applies if you want to catch an error that occurs during the except block - in that case as well, you would need another try statement, like this:

try:
    ...
except:
    try:
        ...
    except:
        ...
else:
    ...
David Zaslavsky
+3  A: 

Reading the documentation would give you this phrase:

The try ... except statement has an optional else clause, which, when present, must follow all except clauses.

Move else to the end of your handler.

Yann Ramin
A: 

looking at the python documentation: http://docs.python.org/reference/compound_stmts.html#the-try-statement It doesn't look like you can have multiple elses with try. Maybe you meant finally at the end?

Sandro