Esto es terriblemente hacker, pero lo he usado en el indicador cuando quería escribir una secuencia de acciones para la depuración:
exec "try: some_problematic_thing()\nexcept: problem=sys.exc_info()"
print "The problem is %s" % problem[1]
En su mayor parte, no estoy molesto por la restricción no-single-line-try-except, pero cuando estoy experimentando y quiero que readline recuerde todo un fragmento de código a la vez en el intérprete interactivo para poder ajustarlo de alguna manera, este pequeño el truco es útil.
Para el propósito real que intentas lograr, puedes probar locals().get('c', b)
; idealmente, sería mejor usar un diccionario real en lugar del contexto local, o simplemente asignar c a Ninguno antes de ejecutar cualquier cosa que pueda o no pueda establecerlo.
Gracias. El problema es que realmente es una consulta de django model.objects.get que estoy tratando de probar. el .get devuelve un error si no se encuentran datos ... no devuelve Ninguno (lo que me molesta) – Brant
@Brant, entonces ¿por qué no puedes ver el error? ¿por qué una línea? –
@Brant, bien, esa situación es un poco diferente a comprobar si se establece una variable (no se declaran variables en Python). El estilo típico en Python es preferir elevar las excepciones a los errores de retorno como valores, lo que a muchos de nosotros nos encanta. Tener que verificar el código de retorno de una operación cada vez y tener dificultades para rastrear los errores si no lo hago es algo que definitivamente no echo de menos cuando escribo Python. En cualquier caso, aunque ha sido discutido, no hay una sintaxis de una sola línea para un bloque 'try' /' except'. Afortunadamente, las líneas son baratas, por lo que la solución de 4 líneas debería funcionar para usted. ;-) –