Latest web development tutorials

manejo de excepciones Python

Python proporciona dos funciones muy importantes para manejar excepciones y errores de programa en Python que aparece en la operación. Puede utilizar esta función para programas depuración pitón.

  • El manejo de excepciones: sitio de tutorial de Python descripción específica.
  • Valer (aserciones): sitio tutorial de Python descripción específica.

excepciones estándar de Python

El nombre de la excepción descripción
BaseException La clase base para todas las excepciones
SystemExit solicitud de intérprete para salir
KeyboardInterrupt La ejecución de interrupción de usuario (por lo general entrar ^ C)
excepción clase base error general
StopIteration Iterador no hay más valores
GeneratorExit Generador (generador) para notificar a la salida anormal
StandardError Toda la clase base estándar incorporado para excepciones
ArithmeticError Toda clase de base de error numérico
FloatingPointError error de cálculo en coma flotante
OverflowError operaciones numéricas excedieron el límite máximo
ZeroDivisionError Además de (o módulo) de cero (todos los tipos de datos)
AssertionError error de aserción
AttributeError Este objeto tiene ninguna propiedad
EOFError Sin entrada incorporada y llegando marcador EOF
EnvironmentError clase base error del sistema operativo
IOError operaciones de entrada / salida fallen
OSError Error del sistema operativo
WindowsError La llamada al sistema falló
ImportError Módulo de importación / objeto no
LookupError clase no válida consultas de bases de datos
IndexError Sin esta secuencia índice (index)
KeyError Sin esta asignación de teclas
MemoryError error de desbordamiento de memoria (para Python intérprete no es fatal)
NameError No declarada / inicializar el objeto (no la propiedad)
UnboundLocalError El acceso sin inicializar variable local
ReferenceError objetos de referencia débiles (referencia débil) han estado tratando de acceder a la recolección de basura de
RuntimeError Error general en tiempo de ejecución
NotImplementedError El método no se ha implementado
SyntaxError error de sintaxis de Python
IndentationError error de guión
TabError Pestaña y el espacio de mezcla
SystemError Por lo general, un error del sistema intérprete
TypeError Tipo de operación no válida
ValueError Los argumentos inválidos aprobadas en
UnicodeError errores relacionados con Unicode
UnicodeDecodeError Unicode decodificación de error
UnicodeEncodeError Error de código Unicode
UnicodeTranslateError error de conversión Unicode
advertencia clase base advertencia
DeprecationWarning Las advertencias sobre características en desuso
FutureWarning Las advertencias sobre la futura estructura de la semántica han cambiado
OverflowWarning La advertencia de edad promovió de manera automática a un entero largo (long) de
PendingDeprecationWarning Será una advertencia sobre características de los residuos
RuntimeWarning el comportamiento sospechoso de tiempo de ejecución (comportamiento en tiempo de ejecución) de advertencia
SyntaxWarning advertencias de sintaxis sospechoso
UserWarning Advierte la generación de código de usuario

Lo que es anormal?

Esa excepción es un evento que tendrá lugar durante la ejecución del programa, que afecta a la ejecución normal del programa.

En circunstancias normales, cuando los programas de Python no se manejan adecuadamente se produce una excepción.

Excepción es objeto de Python que representa un error.

Una excepción se produce cuando la secuencia de comandos de Python que necesitamos para capturar manejarlo, de lo contrario el programa se dará por terminado.


El manejo de excepciones

Se puede detectar la excepción utilizando try / excepto comunicado.

try / excepto sentencia se utiliza para detectar errores en el bloque try, por lo que, salvo declaración a detectar la excepción y procesar la información.

Si no desea que se produce una excepción cuando el final de su programa, sólo tratar de atraparlo en el interior.

sintaxis:

El siguiente es un simple intento .... excepto ... sintaxis otra cosa:

try:
<语句>        #运行别的代码
except <名字>:
<语句>        #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句>        #如果引发了'name'异常,获得附加的数据
else:
<语句>        #如果没有异常发生

obras intentar, al iniciar una instrucción try está, pitón se marcarán en el contexto del programa actual, de modo que cuando se produce una anomalía puede estar de vuelta aquí, tratar cláusula se ejecuta en primer lugar, lo que sucede después depende de la ejecución si hay una excepción.

  • Si se produce una excepción cuando se intenta realizar cuando la declaración después, pitón saltar hacia atrás para tratar de realizar el primer juego, excepto la cláusula es la excepción, el procesamiento de excepciones se ha completado, el flujo de control a través de toda la instrucción try (hora menos que una excepción es procesada y desencadenar una nueva excepciones).
  • Si se produce una anomalía en la sentencia try después de los años, pero no hay coincidencia cláusula except, una excepción se presentará a la parte superior del intento, o al principio del programa (que finalizará el programa, e imprimir un mensaje de error por defecto).
  • Si se produce una excepción cuando se intenta no se ejecuta la cláusula, se ejecutará pitón sentencia else después de la instrucción (si entonces si no), entonces el flujo de control a través de toda la sentencia try.

Ejemplos

Aquí está un ejemplo sencillo, se abre un archivo, el contenido del archivo de contenido está escrito, y no se produce una excepción:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

La salida del programa anterior:

$ python test.py 
内容写入文件成功
$ cat testfile       # 查看写入的内容
这是一个测试文件,用于测试异常!!

Ejemplos

Aquí está un ejemplo sencillo, se abre un archivo, los contenidos escritos en el contenido del archivo, pero el archivo no tiene permiso de escritura, se produjo una excepción:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

Antes de ejecutar el código con el fin de facilitar la prueba, podemos extraer primero el acceso de escritura al archivo testfile comando es la siguiente:

chmod -w testfile

A continuación, ejecute el código anterior:

$ python test.py 
Error: 没有找到文件或读取文件失败

Excepto sin utilizar ningún tipo de excepción con

Se puede utilizar sin ningún tipo de excepción excepción, los siguientes ejemplos:

try:
    正常的操作
   ......................
except:
    发生异常,执行这块代码
   ......................
else:
    如果没有异常执行这块代码

Por encima de manera tratar, salvo declaración a capturar todas las excepciones que se producen. Pero esto no es una buena manera, a través de este programa no se puede identificar la información específica excepción. Ya que captura todas las excepciones.


Y con el uso de múltiples tipos de excepciones excepto

También puede utilizar el mismo, salvo las declaraciones de manejar múltiples excepciones, de la siguiente manera:

try:
    正常的操作
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   发生以上多个异常中的一个,执行这块代码
   ......................
else:
    如果没有异常执行这块代码

try-finally

try-finally, si se produce una excepción llevará a cabo el código final.

try:
<语句>
finally:
<语句>    #退出try时总会执行
raise

Ejemplos

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
finally:
    print "Error: 没有找到文件或读取文件失败"

Si abre un archivo no tiene permiso de escritura, la salida es la siguiente:

$ python test.py 
Error: 没有找到文件或读取文件失败

El mismo ejemplo también se puede escribir como sigue:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    try:
        fh.write("这是一个测试文件,用于测试异常!!")
    finally:
        print "关闭文件"
        fh.close()
except IOError:
    print "Error: 没有找到文件或读取文件失败"

Cuando se lanza una excepción en el bloque try, el bloque finally de código inmediatamente.

Finalmente bloquean todas las declaraciones después de la ejecución, la excepción se dispara de nuevo y ejecución, excepto código de bloque.

Contenido del parámetro es diferente de la excepción.


parámetros anormales

Una excepción puede tomar parámetros, como parámetros de salida de información anormalidad.

Se puede detectar la excepción a través de declaraciones de parámetros, excepto los siguientes:

try:
    正常的操作
   ......................
except ExceptionType, Argument:
    你可以在这输出 Argument 的值...

las variables atípicas típicamente incluyen en el estado excepción recibida. Las variables en la forma de tuplas pueden recibir uno o más valores.

Tupla contiene típicamente la cadena de error, número equivocado, lugar equivocado.

Ejemplos

Los siguientes son ejemplos de una sola excepción:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 定义函数
def temp_convert(var):
    try:
        return int(var)
    except ValueError, Argument:
        print "参数没有包含数字\n", Argument

# 调用函数
temp_convert("xyz");

Los resultados de los procedimientos anteriores son las siguientes:

$ python test.py 
参数没有包含数字
invalid literal for int() with base 10: 'xyz'

gatillo anormal

Podemos utilizar la instrucción de elevarse desencadenar una excepción

aumentar la sintaxis es la siguiente:

raise [Exception [, args [, traceback]]]

declaración de excepción es el tipo de excepción (por ejemplo, NameError) parámetro es un valor de parámetro anormal. Este parámetro es opcional, si no se proporciona, el argumento excepción es "Ninguno".

El último argumento es opcional (no suele utilizarse en la práctica), si hay un objeto de excepción rastro.

Ejemplos

Una excepción puede ser una cadena, una clase u objeto. excepción de Python proporcionado por el núcleo, la mayoría son instancias de la clase, que es un parámetro de una instancia de una clase.

Muy simple definición de una excepción, de la siguiente manera:

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

Nota: Para poder detectar la excepción, "excepto" declaración debe ser útil para lanzar el mismo objeto clase de excepción o una cadena.

Por ejemplo, capturamos más de una excepción, "excepto" declaración es el siguiente:

try:
    正常逻辑
except "Invalid level!":
    触发自定义异常    
else:
    其余代码

Ejemplos

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 定义函数
def mye( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

try:
    mye(0)                // 触发异常
except "Invalid level!":
    print 1
else:
    print 2

Aplicación del código anterior, la salida es:

$ python test.py 
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    mye(0)
  File "test.py", line 7, in mye
    raise Exception("Invalid level!", level)
Exception: ('Invalid level!', 0)

excepciones definidas por el usuario

Mediante la creación de una nueva clase de excepción, el programa puede nombrar sus propias excepciones. excepciones típicas deben ser heredados de la clase de excepción, ya sea directa o indirectamente.

A continuación se presenta asociado a instancia instancia RuntimeError crear una clase, la clase base es RuntimeError, para dar salida a información adicional cuando se desencadena una excepción.

En el bloque try, el usuario realiza una declaración de bloque, excepto excepción personalizada, variables e se utiliza para crear instancias de clases Networkerror.

class Networkerror(RuntimeError):
    def __init__(self, arg):
        self.args = arg

Después de definir las categorías anteriores, puede desencadenar la excepción, de la siguiente manera:

try:
    raise Networkerror("Bad hostname")
except Networkerror,e:
    print e.args