Tu enlace a los documentos de Psycopg2 como que lo explica solo, ¿no?
Entonces, a menos que esté usando un nivel de aislamiento diferente o usando PgBouncer, su primer ejemplo debería funcionar bien. Sin embargo, si desea un control más detallado sobre lo que sucede exactamente durante una transacción, entonces el método probar/excepto podría ser el mejor, ya que es paralelo al estado de la transacción de la base de datos.