Extraño comportamiento Try-Except-Else-Finally con declaraciones de devolución

Este es un código que se está comportando de manera peculiar. Esta es una versión simplificada del comportamiento que he escrito. Esto todavía demostrará el comportamiento extraño y tuve algunas preguntas específicas sobre por qué ocurre esto.

Estoy usando Python 2.6.6 en Windows 7.

def demo1():
    try:
        raise RuntimeError,"To Force Issue"
    except:
        return 1
    else:
        return 2
    finally:
        return 3

def demo2():
    try:
        try:
            raise RuntimeError,"To Force Issue"
        except:
            return 1
        else:
            return 2
        finally:
            return 3
    except:
        print 4
    else:
        print 5
    finally:
        print 6

Resultados:

>>> print demo1()
3
>>> print demo2()
6
3
¿Por qué la demostración uno está devolviendo 3 en lugar de 1?¿Por qué la demostración dos imprime 6 en lugar de imprimir 6 w / 4 o 5?

Respuestas a la pregunta(2)

Su respuesta a la pregunta