Latest web development tutorials

manipulação de exceção Python

python fornece duas funções muito importantes para lidar com exceções e erros programa python que aparece na operação. Você pode usar esse recurso para programas de python de depuração.

  • tratamento de exceção: Python local tutorial descrição específica.
  • Assert (Afirmações): Python local tutorial descrição específica.

exceções padrão python

O nome de exceção descrição
BaseException A classe base para todas as exceções
SystemExit solicitação de intérprete para sair
KeyboardInterrupt Interrupção do Usuário de Execução (geralmente entram ^ C)
exceção classe base erro geral
StopIteration Iterator não há mais valores
GeneratorExit Generator (gerador) para notificar a saída anormal
StandardError Toda a classe base padrão built-in para exceções
ArithmeticError Toda a classe base de erro numérico
FloatingPointError erro de cálculo de ponto flutuante
OverflowError operações numéricas excedeu o limite máximo
ZeroDivisionError Para além (ou módulo) de zero (todos os tipos de dados)
AssertionError falha de declaração
AttributeError Este objeto não tem nenhuma propriedade
EOFError Não built-in de entrada e chegada marcador EOF
EnvironmentError classe de sistema de base de erro operacional
IOError operações de entrada / saída para falhar
OSError Erro do sistema operacional
WindowsError chamada de sistema falhou
ImportError Import Module / object falhou
LookupError consultas de base de dados de classe inválida
IndexError Sem esse índice de sequência (index)
KeyError Sem esse mapeamento de teclas
MemoryError erro de estouro de memória (para Python intérprete não é fatal)
NameError Não declarado / inicializar o objeto (não propriedade)
UnboundLocalError Acesso variável local não inicializada
ReferenceError objetos de referência fracos (referência fraca) têm tentado acessar a coleta de lixo de
RuntimeError Erro geral de tempo de execução
NotImplementedError O método não foi implementado
SyntaxError Python erro de sintaxe
IndentationError erro travessão
TabError Tab e espaço mix
SystemError erro de sistema normalmente intérprete
TypeError Tipo de operação inválida
ValueError argumentos inválidos passados ​​em
UnicodeError erros relacionados Unicode
UnicodeDecodeError decodificação Unicode de erro
UnicodeEncodeError erro de código Unicode
UnicodeTranslateError erro de conversão Unicode
aviso classe base aviso
DeprecationWarning Avisos sobre recursos obsoletos
FutureWarning Avisos sobre a futura estrutura da semântica mudaram
OverflowWarning O aviso de idade promovido sobre automaticamente para um inteiro longo (long) de
PendingDeprecationWarning Será um aviso sobre características dos resíduos
RuntimeWarning o comportamento de tempo de execução suspeito (o comportamento de tempo de execução) alerta
SyntaxWarning avisos de sintaxe suspeito
UserWarning Adverte a geração de código do usuário

O que é anormal?

Essa exceção é um evento que irá ocorrer durante a execução do programa, afetando a execução normal do programa.

Em circunstâncias normais, quando os programas Python não lidar correctamente com uma exceção ocorre.

Exceção é Python objeto representando um erro.

Uma exceção ocorre quando o script Python que precisamos para capturar segurá-lo, caso contrário, o programa será encerrado.


Manipulação de exceção

Você pode capturar a exceção usando try / excepto comunicado.

tente / excepto declaração é usada para detectar erros no bloco try, de modo que, salvo declaração para capturar a exceção e processar a informação.

Se você não quer uma exceção ocorre quando o final do seu programa, apenas tentar pegá-lo no interior.

sintaxe:

O que se segue é uma tentativa simples .... exceto ... sintaxe mais:

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

tentam obras, quando se inicia um try, python será marcado no contexto do actual programa, de modo que quando uma anormalidade ocorre pode estar de volta aqui, tente cláusula é executada primeiro, que acontece a seguir depende de execução se existe uma excepção.

  • Se ocorrer uma exceção ao tentar executar quando a instrução depois, python pular de volta para tentar realizar a primeira cláusula é a exceção, o processamento de exceção for concluída, o fluxo de controle em toda a instrução try (hora a menos que uma exceção é processado e desencadear uma nova excepções).
  • Se ocorrer uma anormalidade na instrução try após os anos, mas nenhuma cláusula válida, uma exceção será submetida ao topo da tentativa, ou para o início do programa (que no final do programa, e imprimir uma mensagem de erro padrão).
  • Se ocorrer uma exceção quando você tenta cláusula não é executado, python else será executado após a instrução (se, em seguida, outra coisa), então o fluxo de controle através de toda a instrução try.

Exemplos

Aqui está um exemplo simples, ele abre um arquivo, o conteúdo do conteúdo do arquivo é escrito, e não é uma exceção ocorre:

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

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

A saída do programa acima:

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

Exemplos

Aqui está um exemplo simples, ele abre um arquivo, o conteúdo escrito em o conteúdo do arquivo, mas o arquivo não tem permissão de escrita, ocorreu uma exceção:

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

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

Antes de executar o código, a fim de facilitar o teste, podemos remover primeiro acesso de gravação para o arquivo testfile comando é a seguinte:

chmod -w testfile

Em seguida, executar o código acima:

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

Exceto sem o uso de qualquer tipo de exceção com

Você pode usar sem qualquer tipo de exceção, exceto, os seguintes exemplos:

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

Acima de maneira tente-exceto declaração para capturar todas as exceções que ocorrem. Mas este não é um bom caminho, através deste programa, não podemos identificar as informações de exceção específica. Porque ele captura todas as exceções.


E com o uso de vários tipos de excepções excepto

Você também pode usar o mesmo, exceto as instruções para lidar com múltiplas exceções, como segue:

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

try-finally

try-finally, se uma exceção ocorre irá executar o código final.

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

Exemplos

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

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

Se você abrir um arquivo não tem permissão de escrita, a saída é a seguinte:

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

O mesmo exemplo também pode ser escrita como se segue:

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

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

Quando uma exceção no bloco try, o bloco finally de código imediatamente.

finalmente bloquear todas as declarações após a execução, a exceção é acionado novamente e execução, excepto código de bloco.

Conteúdo do parâmetro é diferente de excepção.


parâmetros anormais

Uma exceção pode levar parâmetros, como parâmetros de saída de informação anormalidade.

Você pode capturar a exceção através de declarações de parâmetros, exceto como segue:

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

variáveis ​​outlier tipicamente incluídas na declaração de exceção recebido. Variáveis ​​em forma de tuplos pode receber um ou mais valores.

Tuple normalmente contém a string de erro, número errado, local errado.

Exemplos

Os seguintes são exemplos de uma única exceção:

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

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

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

Os resultados dos procedimentos acima são como se segue:

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

gatilho anormal

Podemos usar a instrução de levantar-se acionar uma exceção

aumentar a sintaxe é a seguinte:

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

declaração exceção é o tipo de exceção (por exemplo, NameError) parâmetro é um valor de parâmetro anormal. Este parâmetro é opcional, se não for fornecido, o argumento de exceção é "Nenhum".

O último argumento é opcional (raramente usado na prática), se houver um objeto de exceção de rastreamento.

Exemplos

Uma exceção pode ser uma string, uma classe ou objeto. exceção do Python fornecido através do kernel, a maioria são instâncias da classe, que é um parâmetro de uma instância de uma classe.

Muito simples definição de uma exceção, como segue:

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

Nota: Para ser capaz de capturar a exceção ", exceto" A declaração deve ser útil para jogar o mesmo objeto classe de exceção ou string.

Por exemplo, podemos captar mais de uma exceção ", exceto" instrução é a seguinte:

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

Exemplos

#!/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

Implementação do código acima, a saída é:

$ 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)

exceções definidas pelo usuário

Através da criação de uma nova classe de exceção, o programa pode citar suas próprias exceções. exceções típicas deve ser herdada da classe Exception, direta ou indiretamente.

Seguindo está associado a instância instance RuntimeError criar uma classe, a classe base é RuntimeError, para emitir informações adicionais quando uma exceção é acionada.

No bloco try, o usuário executa uma instrução em bloco, exceto exceção personalizada, variável e é usado para criar instâncias de classe Networkerror.

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

Depois de definir as categorias acima, você pode acionar a exceção, como segue:

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