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