El gran libro de Python. Marco Buttu

Чтение книги онлайн.

Читать онлайн книгу El gran libro de Python - Marco Buttu страница 21

Автор:
Серия:
Издательство:
El gran libro de Python - Marco Buttu

Скачать книгу

referencia este atributo. Este, cuando existe, no es siempre _ _name_ _. Con los archivos, por ejemplo, se utiliza un atributo más explícito (sin guión bajo), el atributo name, el cual hace referencia a la cadena pasada a open() como primer argumento:

image

      El nombre de una etiqueta es la cadena construida sobre la base de la etiqueta: por ejemplo, el nombre de la etiqueta foo es la cadena 'foo' y el del atributo path del módulo os es la cadena 'path'. La función integrada dir(), cuando se llama sin argumentos, devuelve una lista que contiene los nombres de las etiquetas en el ámbito actual; si no es así, al pasarle un objeto, como hemos visto en secciones anteriores, esta devuelve los nombres de los atributos más significativos de dicho objeto:

image

      Así, el módulo os tiene el atributo path y el nombre de este atributo es la cadena 'path'. El nombre del objeto al cual hace referencia el atributo path de os, en los sistemas Unix-like, es la cadena 'posixpath':

image

      NOTA

      En la última sección de este capítulo hablaremos del módulo os, y veremos que en los sistemas Windows os.path hace referencia al módulo ntpath:

image

      Un objeto no siempre tiene un nombre (las instancias de los tipos de datos básicos, por ejemplo, no lo tienen), mientras que una etiqueta sí, porque este lo da la etiqueta en forma de cadena. El nombre de un objeto, por tanto, no tiene nada que ver con el de las etiquetas que a él se refieren, porque, si lo pensamos bien, más de una etiqueta puede hacer referencia al mismo objeto. El único vínculo entre los dos es que, quizás (como para las clases, las funciones y los módulos), el nombre de la etiqueta se utiliza en el momento de la creación del objeto para asignarle el nombre:

image image

      Los nombres de las etiquetas tienen distintos contextos de uso. Por ejemplo, permiten recuperar los objetos a los cuales las etiquetas hacen referencia, utilizando los nombres como clave de diccionarios concretos que representan los espacios de nombres (namespace). Aunque hablaremos de ello con mayor profundidad en el Capítulo 4, vamos a mostrar un breve ejemplo, para exponer un caso práctico de uso. Para ello, consideremos la función integrada globals(), la cual devuelve los espacios de nombres global en forma de diccionario. Este último tiene como claves los nombres de las etiquetas globales, y como valores, los correspondientes objetos:

image

      Dicho esto, cuando no exista ninguna posibilidad de error, hablaremos de la etiqueta pero refiriéndonos al objeto. Por ejemplo, en el caso siguiente:

image

      en lugar de decir que "hemos sumado los objetos a los cuales se refieren a y b", diremos simplemente que hemos sumado a y b. Lo mismo es válido para los atributos, para los cuales diremos en el siguiente ejemplo que "hemos añadido un elemento al atributo a de Foo", en lugar de "hemos añadido un elemento al objeto al cual se refiere el atributo a de Foo":

image

      En todos los casos que puedan dar lugar a malentendidos seremos más formales.

      Los errores en un programa Python se manifiestan en forma de errores de sintaxis o de excepciones.

      Errores de sintaxis

      Como puede deducirse, los errores de sintaxis aparecen cuando una instrucción no se escribe correctamente. Por ejemplo, la omisión de los dos puntos al final de la instrucción for es un error de sintaxis:

image

      Los errores de sintaxis se señalan con un mensaje que aparece en la línea de código en la cual se ha detectado el error, además de una pequeña flecha que indica el elemento siguiente al punto en que se ha detectado. En el ejemplo anterior, el error ha sido detectado antes de print(i) y, de hecho, inmediatamente después de range(10) faltan los dos puntos necesarios para terminar la instrucción for. También se muestran el nombre del archivo y el número de línea para así facilitar la identificación del error:

image

      Los errores de sintaxis se señalan antes de que el programa sea ejecutado, puesto que se generan durante la fase de compilación en bytecode:

image

      Las excepciones

      Las excepciones se generan cuando una instrucción, aunque sintácticamente correcta, da lugar a errores durante su ejecución. Consideremos, por ejemplo, el archivo errors.py:

image

      Hay un error tipográfico (hemos escrito prin en lugar de print), el cual será identificado solo cuando el flujo de ejecución llegue a esta instrucción, puesto que solo en dicho momento Python buscará la definición de la etiqueta prin. Así, el error se generará únicamente si el usuario escribe el carácter a:

image

      Como se puede ver en este ejemplo, cuando las excepciones no son generadas por el programa, la ejecución termina y se muestra un mensaje de error. Este mensaje se distingue de los derivados de errores de sintaxis principalmente por la presencia del traceback.

      NOTA

      Las exepciones también pueden mostrarse a propósito, mediante la instrucción raise. Consideremos, por ejemplo, el archivo siguiente:

image

      Esto es lo que ocurre cuando lo ejecutamos:

image

      Hablaremos con mayor profundidad de la instrucción raise en el Capítulo 5.

      Puesto que las excepciones son generadas solo cuando el fragmento de código que contiene el error es ejecutado, es posible que un programa funcione casi siempre. Si hubiéramos ejecutado el archivo errors.py efectuando 100 bucles, sin escribir nunca el carácter a, posiblemente hubiéramos estado seguros de que el programa no contenía error alguno. En el caso de que ocurran este tipo de problemas, nos podría ser útil utilizar alguna herramienta que analice el código Python con el fin de detectar posibles errores. Entre estos, citamos pyflakes y pylint. He aquí un ejemplo de uso de este último:

Скачать книгу