Conhecimento básico de Python (três): erro Python, aviso, resumo de tratamento de exceções

Insira a descrição da imagem aqui

1 erro de sintaxe

Erros de sintaxe Python ou erros de análise são frequentemente encontrados por iniciantes, conforme mostrado no exemplo a seguir

>>> while True print('Hello world')
  File "<stdin>", line 1, in ?
    while True print('Hello world')
                  ^
SyntaxError: invalid syntax

Neste exemplo, a função print () é verificada quanto a erros porque falta dois pontos: na frente dela.
O analisador apontou a linha errada e marcou uma pequena seta onde o erro foi encontrado primeiro.

2 Aviso padrão

  • Aviso: a classe base para avisos
  • Aviso de descontinuação: aviso sobre recursos descontinuados
  • FutureWarning: Um aviso de que a semântica da estrutura mudará no futuro
  • UserWarning: aviso gerado pelo código do usuário
  • PendingDeprecationWarning: um aviso de que o recurso será descontinuado
  • RuntimeWarning: aviso de comportamento suspeito em tempo de execução (comportamento em tempo de execução)
  • Aviso de sintaxe: aviso de sintaxe suspeita
  • ImportWarning: usado para acionar um aviso durante a importação de um módulo
  • UnicodeWarning: avisos relacionados a Unicode
  • BytesWarning: avisos relacionados a bytes ou bytecode
  • ResourceWarning: avisos relacionados ao uso de recursos

Se você precisar ignorar o aviso, basta adicionar o código a seguir.

>>> import warnings 
>>> warnings.filterwarnings('ignore')

3 Tratamento de exceções

Mesmo se a sintaxe de um programa Python estiver correta, podem ocorrer erros ao executá-lo. Os erros detectados durante o tempo de execução são chamados de exceções. A linguagem do computador define os tipos de exceção para possíveis erros.Quando um determinado erro dispara uma exceção correspondente, o manipulador de exceções será iniciado para restaurar a operação normal do programa. A maioria das exceções não será tratada pelo programa e é exibida na forma de mensagens de erro.

Resumo do tratamento de exceção comum:Insira a descrição da imagem aqui

A instrução try-except captura (recebe) a notificação de exceção e transforma o fluxo de exceção no fluxo normal. A
instrução try-finally executa a instrução que deve ser executada. A
instrução raise envia a notificação de exceção e, ao mesmo tempo, entra no fluxo de exceção, a
instrução assert envia a exceção AssertionError

3.1 Exceções padrão do Python

  • BaseException: Todas as classes base anormais
  • Exceção: Classe base de anormalidade convencional
  • StandardError: A classe base para todas as exceções padrão integradas
  • ArithmeticError: A classe base para todas as exceções de cálculo numérico
  • FloatingPointError: exceção de cálculo de ponto flutuante
  • OverflowError : Operação numérica excede o limite máximo
  • ZeroDivisionError : divisão por zero
  • AssertionError : a instrução de asserção (assert) falhou
  • AttributeError : tentativa de acessar o atributo de objeto desconhecido
  • EOFError: Nenhuma entrada embutida, marca EOF alcançada
  • EnvironmentError: A classe base de exceções do sistema operacional
  • IOError: Falha na operação de entrada / saída
  • OSError : Uma exceção gerada pelo sistema operacional (por exemplo, abrir um arquivo que não existe)
  • WindowsError: Falha na chamada do sistema
  • ImportError : Ao importar um módulo falha
  • KeyboardInterrupt: execução de interrupção do usuário
  • LookupError: a classe base para consulta de dados inválidos
  • IndexError : o índice está fora do intervalo da sequência
  • KeyError : Encontre uma palavra-chave que não existe no dicionário
  • MemoryError : estouro de memória (a memória pode ser liberada excluindo o objeto)
  • NameError : tentativa de acessar uma variável que não existe
  • UnboundLocalError: acesso a variáveis ​​locais não inicializadas
  • ReferenceError: tentativas fracas de referência para acessar objetos que foram coletados como lixo
  • RuntimeError: exceção geral de tempo de execução
  • NotImplementedError: método ainda não implementado
  • SyntaxError : exceção causada por erro de sintaxe
  • IndentationError: exceção causada por erro de indentação
  • TabError: Tab e espaço são misturados
  • SystemError: exceção do sistema interpretador geral
  • TypeError : operação inválida entre diferentes tipos
  • ValueError : Parâmetro inválido passado
  • UnicodeError: exceção relacionada ao Unicode
  • UnicodeDecodeError: exceção durante a decodificação Unicode
  • UnicodeEncodeError: exceção causada por erro de codificação Unicode
  • UnicodeTranslateError: exceção causada por erro de conversão Unicode

Existem relacionamentos hierárquicos dentro do sistema de exceção. Alguns relacionamentos no sistema de exceção Python são os seguintes:

3.2 declaração try-except

A captura de exceção pode usar instruções try / except.
Insira a descrição da imagem aqui
A instrução try funciona da seguinte maneira:

  • Primeiro, execute a trycláusula ( a declaração entre a palavra - chave trye a palavra-chave except)
  • Se nenhuma exceção ocorrer, a exceptcláusula será ignorada e tryterminará após a execução.
  • Se tryocorrer uma exceção durante a execução da cláusula, o tryrestante da cláusula será ignorado. Se o tipo da exceção exceptcorresponder ao nome depois dela, a exceptcláusula correspondente será executada. tryO código após a última instrução executada .
  • Se uma exceção não corresponder a nenhuma except, a exceção será passada para a camada superior try.

【exemplo】

try:
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError as error:
    print('打开文件出错\n原因是:' + str(error))
# 打开文件出错
# 原因是:[Errno 2] No such file or directory: 'test.txt'

Uma tryinstrução pode conter várias exceptcláusulas para lidar com diferentes exceções específicas. No máximo, apenas uma ramificação será executada.

【exemplo】

try:
    int("abc")
    s = 1 + '1'
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError as error:
    print('打开文件出错\n原因是:' + str(error))
except TypeError as error:
    print('类型出错\n原因是:' + str(error))
except ValueError as error:
    print('数值出错\n原因是:' + str(error))
# 数值出错
# 原因是:invalid literal for int() with base 10: 'abc'

[Exemplos] uma exceptcláusula pode tratar várias exceções que serão colocadas entre parênteses como uma tupla.

try:
    s = 1 + '1'
    int("abc")
    f = open('test.txt')
    print(f.read())
    f.close()
except (OSError, TypeError, ValueError) as error:
    print('出错了!\n原因是:' + str(error))
# 出错了!
# 原因是:unsupported operand type(s) for +: 'int' and 'str'

3.3 instrução try-except-else

A instrução try-except também possui uma cláusula else opcional.Se esta cláusula for usada, ela deve ser colocada após todas as cláusulas except. A cláusula else será executada quando nenhuma exceção ocorrer na cláusula try.
Insira a descrição da imagem aqui

exceptNão é uma boa maneira de usá-lo sem qualquer tipo de exceção. Não podemos identificar informações de exceção específicas por meio do programa porque ele captura todas as exceções.

【exemplo】

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

Nota: elsea existência de uma exceptdeclaração deve ser baseada na existência da declaração. Usar exceptuma trydeclaração em uma elsedeclaração sem declaração causará um erro gramatical.

3.4 tentar - exceto - senão - finalmente 语句

A instrução try-finally executará o código final independentemente de ocorrer uma exceção.
Insira a descrição da imagem aqui

try:
    检测范围
except Exception[as reason]:
    出现异常后的处理代码
finally:
    无论如何都会被执行的代码

Independentemente de tryocorrer uma exceção na finallycláusula , a cláusula será executada.
Se uma exceção tryfor lançada na cláusula sem qualquer exceptinterceptação, a exceção será finallylançada após a cláusula ser executada.

【exemplo】

def divide(x, y):
    try:
        result = x / y
        print("result is", result)
    except ZeroDivisionError:
        print("division by zero!")
    finally:
        print("executing finally clause")
divide(2, 1)
# result is 2.0
# executing finally clause
divide(2, 0)
# division by zero!
# executing finally clause
divide("2", "1")
# executing finally clause
# TypeError: unsupported operand type(s) for /: 'str' and 'str'

3.5 levantar instrução - lançar uma exceção

Python usa a instrução raise para lançar uma exceção especificada.
O formato da sintaxe de aumento é o seguinte:

aumentar [Exceção [, args [, traceback]]]

Insira a descrição da imagem aqui

Python usa a raiseinstrução para lançar uma exceção especificada.
【exemplo】

try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')    
# An exception flew by!

3.6 afirmar declaração-asserção

Python assert (assertion) é usado para julgar uma expressão e disparar uma exceção quando a condição da expressão é falsa.
Assertions podem retornar um erro diretamente quando as condições não são atendidas e o programa é executado sem esperar que o programa trave após a execução. Por exemplo, nosso código só pode ser executado no sistema Linux. Você pode primeiro determinar se o sistema atual atende às condições. Insira a descrição da imagem aqui
O formato da sintaxe é o seguinte:

afirmar a expressão

Equivalente a:

se não expressão:
aumentar AssertionError

Os parâmetros também podem ser seguidos por assert:

afirmação de expressão [, argumentos]

【exemplo】

>>> assert 1==1    # 条件为 true 正常执行
>>> assert 1==2    # 条件为 false 触发异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

# 以下实例判断当前系统是否为 Linux,如果不满足条件则直接触发异常,不必执行接下来的代码:
>>> import sys
>>> assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"

3.7 Exceção definida pelo usuário

Você pode ter suas próprias exceções criando uma nova classe de exceção. A classe de exceção herda da classe Exception e pode ser herdada direta ou indiretamente, por exemplo:

>>> class MyError(Exception):
        def __init__(self, value):
            self.value = value
        def __str__(self):
            return repr(self.value)  
            
>>> try:
        raise MyError(2*2)
    except MyError as e:
        print('My exception occurred, value:', e.value)   
My exception occurred, value: 4

>>> raise MyError('oops!')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
__main__.MyError: 'oops!'

A maioria dos nomes de exceção termina em "Erro", assim como os nomes de exceção padrão.

Perguntas práticas :
1. Adivinhe o jogo de números .
Descrição do título: O
computador gera um número aleatório entre zero e 100 e, em seguida, pede ao usuário para adivinhar. Se o número adivinhado pelo usuário for maior do que este número, o prompt é muito grande, caso contrário, o prompt é muito pequeno. O computador irá perguntar, "Parabéns por adivinhar este número ...". Antes que o usuário adivinhe a cada vez, o programa produzirá a primeira estimativa do usuário; se a entrada do usuário não for um número, o programa dirá ao usuário "a entrada é inválida".
(Tente usar a estrutura de tratamento de exceção try catch para lidar com a situação de entrada)
O módulo Random é usado para obter números aleatórios.

# your code here
import numpy as np

if __name__=="__main__":
    print("猜测一个0-100之间的整数:")
    num = np.random.randint(100)
    count = 0
    flag = True
    while flag:
        count += 1
        try:
            guess = int(input("第"+str(count)+"次猜,请输入一个整形数字:"))
            if guess < num:
                print("太小了")
            elif guess > num:
                print("太大了")
            else:
                print("恭喜你猜到了这个数是"+str(num))
                flag = False
        except:
            pass
            print("输入无效")
猜测一个0-100之间的整数:
第1次猜,请输入一个整形数字:50
太大了
第2次猜,请输入一个整形数字:25
太大了
第3次猜,请输入一个整形数字:12
太大了
第4次猜,请输入一个整形数字:6
太小了
第5次猜,请输入一个整形数字:9
恭喜你猜到了这个数是9

Referência

  • https://www.runoob.com/python3/python3-errors-execptions.html
  • https://github.com/datawhalechina/team-learning-program

Datawhale

Datawhale é uma organização de código aberto com foco em ciência de dados e IA. Ela reúne excelentes alunos de muitas universidades e empresas renomadas na área e reúne um grupo de membros da equipe com código aberto e espírito exploratório. Com a visão de "para o aluno, crescer com os alunos", Datawhale incentiva a verdadeira autoexpressão, abertura e tolerância, confiança mútua e assistência mútua, a coragem de tentar e cometer erros e a coragem de assumir responsabilidades. Ao mesmo tempo, Datawhale usa o conceito de código aberto para explorar conteúdo de código aberto, aprendizado de código aberto e soluções de código aberto, capacitar o treinamento de talentos, ajudar no crescimento de talentos e estabelecer uma conexão entre pessoas, pessoas e conhecimento, pessoas e empresas, e pessoas e o futuro.

Acho que você gosta

Origin blog.csdn.net/OuDiShenmiss/article/details/107575750
Recomendado
Clasificación