python - segun - elevar declaración sobre una expresión condicional
si no python (4)
Bueno, podrías probar el bool por separado:
if expr: raise exception(''foo'')
return val
De esa manera, podrías hacer una prueba para expr
antes.
Siguiendo el "principio Samurai", estoy tratando de hacer esto en mis funciones pero parece que está mal ...
return <value> if <bool> else raise <exception>
¿Hay alguna otra forma "hermosa" de hacer esto? Gracias
En línea / ternario if
es una expresión, no una declaración. Su intento significa "si es bool, devuelve un valor, de lo contrario, devuelva el resultado de la raise expression
de raise expression
", lo cual no tiene sentido, por supuesto, porque la raise exception
es en sí misma una declaración, no una expresión.
No hay manera de hacer esto en línea, y no deberías querer hacerlo. Hazlo explícitamente:
if not bool:
raise MyException
return value
Me gusta hacerlo con aserciones, por lo que enfatiza que ese miembro debe ser, como un contrato.
>>> def foo(self):
... assert self.value, "Not Found"
... return self.value
Si absolutamente quieres raise
en una expresión, podrías hacer
def raiser(ex): raise ex
return <value> if <bool> else raiser(<exception>)
Esto "intenta" devolver el valor de retorno de raiser()
, que sería None
, si no hubiera un raise
incondicional en la función.