Cosi` ad occhio direi che una delle funzioni/metodi che chiami (consapevolmente o meno) a sua volta utlizza il metodo "finish" su un oggetto su cui non puo` applicarlo.

Per circoscrivere il problema potresti togliere (commentare) le istruzioni una alla volta (o a gruppi), in modo da verificare dove si verifica.

Anche una serie di print in posizion strategiche dello script possono aiutare. PS: se usi print devi scrivere su STDERR, oppure usare il fflush ogni volta, altrimenti cio` che ha scritto potresti non vederlo (rimane nel buffer e non sul file/terminale).