En términos generales (no necesariamente de Python), que tienden a preferir el método "probar-entonces-decir-me-si-que-fue-malo" (excepciones) en todo menos en los casos más simples. Esto se debe a que, en entornos con subprocesos o durante el acceso a la base de datos, los datos subyacentes pueden cambiar entre la verificación de clave y la extracción de valor.
Si no está cambiando la matriz asociativa fuera del subproceso actual, puede hacer el método "check-first-then-extract".
Pero eso es para el caso general. Aquí, en concreto, puede utilizar el método get
que le permite especificar un valor predeterminado si no existe la clave:
return d.get (c, "N/A")
Voy a aclarar lo que dije en el primer párrafo.En situaciones donde los datos subyacentes pueden cambiar entre verificación y uso, debe siempre usar una operación de tipo excepción (a menos que tenga una operación que no cause un problema, como d.get()
, mencionado anteriormente). Considere, por ejemplo, las siguientes dos hilos líneas de tiempo:
+------------------------------+--------------------+
| Thread1 | Thread2 |
+------------------------------+--------------------+
| Check is NY exists as a key. | |
| | Delete NY key/val. |
| Extract value for NY. | |
+------------------------------+--------------------+
Al hilo 1 intenta extraer el valor, se obtendrá una excepción de todos modos, por lo que puede código así sólo por la posibilidad y quite la marca inicial.
El comentario sobre las bases de datos también es relevante ya que esa es otra situación donde los datos subyacentes pueden cambiar. Es por eso que tiendo a preferir el SQL atómico (cuando sea posible) en lugar de obtener una lista de claves y luego procesarlas con declaraciones individuales.
excepto: es mal karma. Sea siempre específico acerca de lo que le interesa capturar, en este caso KeyError – richo
Escogió un mal ejemplo. La respuesta obvia no implica ni estilo. – Omnifarious