Explicação do conhecimento do mecanismo de tratamento de exceções em testes automatizados Python

I. Introdução

Hoje, o autor ainda quer falar sobre o básico em python, explicando principalmente a introdução, captura e processamento de exceções em Python. Somente depois de aprender isso podemos preparar o caminho para a subsequente construção automatizada da estrutura de teste e manutenção diária. Vamos lá direto ao assunto, sem falar bobagens.

Dois, coleção de tratamento de exceções

2.1 Explicação do tratamento de exceções

Antes de introduzir formalmente o tratamento de exceções, precisamos deixar que todos entendam um conceito: é impossível que a programação seja perfeita, e sempre há situações que não podem ser consideradas, porque ninguém é perfeito e o ser humano tem falhas, sem falar que a programação vem de seres humanos. Mãos, em um projeto real, não acreditam em quem diz: Meu código é perfeito, não haverá problemas com isso, e da mesma forma, no mundo da programação, não existe confiabilidade absoluta.

Todos também devem deixar claro que, desde que o programa seja escrito por uma pessoa, deve haver problemas. Se o programa não for executado de acordo com o processo normal, chamamos isso de exceção. Como o nome indica, o tratamento de exceções é para resolver esta situação anormal e fazer com que o programa siga normalmente a lógica e a execução do processo.

2.2 Captura de exceção

Quando um programa é executado e relata um erro, ele para de ser executado. Se executá-lo novamente após o tratamento de exceções, não haverá mais relatórios de erros. Este relatório de erros pode ser capturado para fazer o programa funcionar sem problemas. Este processo de tratamento de exceções é chamada captura de exceção. Vejamos primeiro um exemplo:

print("------------------- 欢迎来到报名注册系统 -------------------")
 
age = (input("请输入您的年龄:"))
age = int(age)
if age < 18:
    print("很遗憾,您暂时不满足注册条件")
else:
    print("恭喜您符合注册条件")

Conforme mostrado no código acima, quando os dados de entrada são 18, o cálculo lógico do programa pode ser realizado normalmente, para que o código possa ser executado normalmente até o final, mas não há realmente nenhum problema com esse código? Vejamos este exemplo novamente. Quando a entrada é abc em letras inglesas, ocorre um erro ValueError , literalmente nos dizendo que há um erro numérico e que a string não pode ser convertida em um número inteiro:

print("------------------- 欢迎来到报名注册系统 -------------------")
 
age = (input("请输入您的年龄:"))
age = int(age)
if age < 18:
    print("很遗憾,您暂时不满足注册条件")
else:
    print("恭喜您符合注册条件")

Conforme mostrado na figura acima, quando ocorre um ValueError, podemos tratá-lo por meio da captura de exceção. O código processado é:

print("------------------- 欢迎来到报名注册系统 -------------------")
age = (input("请输入您的年龄:"))
 
try:
    age = int(age)
except:
    print("您的年龄输入非法,请重新运行本程序")
 
if age < 18:
    print("很遗憾,您暂时不满足注册条件")
else:
    print("恭喜您符合注册条件")

 

Conforme mostrado na figura acima, executamos o programa novamente e inserimos abc, o programa ainda não pode ser executado, não é o ValueError agora, mas o TypeError agora.

2.3 Princípio da Captura de Exceções

Para resolver o erro TypeError acima, vamos primeiro entender o princípio da captura de exceção. Quando uma instrução try é oficialmente iniciada, Python a marcará no contexto do programa atual. Quando ocorrer uma exceção, retorne à marca e à cláusula try é executado primeiro. , os seguintes cenários possíveis:

Cenário 1: Se ocorrer uma exceção durante a execução da instrução try, o Python volta para try e executa a primeira cláusula except que corresponde à exceção. Depois que a exceção é tratada, o código continua a ser executado.

Cenário 2: Se ocorrer uma exceção durante a execução da instrução try e não houver nenhuma cláusula except correspondente, a exceção será enviada para a tentativa superior ou para a camada superior do programa, e o programa terminará aqui, e o erro mensagem será impressa.

Cenário 3: Se nenhuma exceção ocorrer durante a execução da cláusula try, o Python continuará a executar a instrução de código.

Depois de entender o princípio da captura de exceção, vamos ver como resolver o erro TypeError anterior. O significado literal está errado e o número inteiro não pode ser comparado com a string, mas na verdade já processamos a variável idade antes disso. Mas porque a exceção de try é capturada, a primeira cláusula except correspondente a try é executada e a cláusula substitui a instrução de exceção, portanto a conversão de tipo aqui é inválida e um erro de tipo ocorrerá quando o programa for executado novamente. Este método também é muito simples, basta colocar a declaração de julgamento no try.

Quando a instrução de julgamento é colocada no try, ela muda um pouco. Se nenhuma exceção for detectada, o programa será executado normalmente e o julgamento entrará em vigor. Se uma exceção for detectada, ele irá diretamente para a execução except saída, informando que sua idade é ilegal, então não Haverá lógica de julgamento, então não haverá erros TypeError. A propósito, este é nosso bug de desenvolvimento comum "compre um e leve outro". O código para o segundo modificação é a seguinte:

# 程序仍然有可优化的地方,仅展示try.. except语句的使用方式
print("------------------- 欢迎来到报名注册系统 -------------------")
age = (input("请输入您的年龄:"))
 
try:
    age = int(age)
    if age < 18:
        print("很遗憾,您暂时不满足注册条件")
    else:
        print("恭喜您符合注册条件")
except:
    print("您的年龄输入非法,请重新运行本程序")

 

2.4 Captura de exceção específica

Captura de exceção específica, como o nome indica, é capturar uma exceção específica que ocorre, como o ValueError que encontramos. Se você capturar outros tipos de exceção, quando encontrar ValueError durante a execução do código, um erro ainda será relatado:

print("------------------- 欢迎来到报名注册系统 -------------------")
age = (input("请输入您的年龄:"))
 
try:
    age = int(age)
    if age < 18:
        print("很遗憾,您暂时不满足注册条件")
    else:
        print("恭喜您符合注册条件")
# 这里进行捕获的异常类型是IndexError,非ValueError,最后的结果仍然会报错,因为没有成功捕获
except IndexError:
    print("您的年龄输入非法,请重新运行本程序")

Quando o tipo capturado estiver errado, uma mensagem de erro ainda aparecerá para encerrar o programa. Por exemplo, se uma pessoa estiver dirigindo embriagada, então deve ser tratado pela polícia de trânsito em vez do Departamento de Assuntos Civis, porque esse não é o seu responsabilidade.A captura de exceção também deve prestar atenção à contraparte, conforme mostrado no código a seguir. Como mostrado, se estiver definido como ValueError, pode ser capturado com sucesso, assim como a polícia de trânsito lidou com dirigir embriagado, solução perfeita:

print("------------------- 欢迎来到报名注册系统 -------------------")
age = (input("请输入您的年龄:"))
 
try:
    age = int(age)
    if age < 18:
        print("很遗憾,您暂时不满足注册条件")
    else:
        print("恭喜您符合注册条件")
except ValueError:
    print("您的年龄输入非法,请重新运行本程序")

 

2.5 Tratamento de captura de exceção

Acabamos de dar um exemplo. Quando a exceção é capturada como IndexError, o erro de ValueError ainda aparecerá após a execução do programa, mas podemos capturá-lo diretamente quando não definimos, exceto para usá-lo diretamente. Então, o que precisamos fazer defini-lo para? Presumivelmente, alguns estudantes já tiveram essas dúvidas em mente.

except pode ser entendido como um policial universal, um coletor universal, que pode capturar todos os tipos de exceção (muito poucos não podem ser capturados diretamente), e a captura de exceção específica só pode capturar exceções específicas que ocorrem. A razão pela qual ainda a usamos é porque ela é Especializar-se em captar um tipo. Por exemplo, se uma pessoa tem problemas de pele, então deve ser mais profissional ir ao consultório de dermatologia do que ao médico do pronto-socorro. Como diz o ditado, existe especialização em cirurgia.

Exceto por ser um coletor universal, ele lidará com isso da mesma maneira depois de capturar uma exceção. Por exemplo, é obviamente irracional tratar os sintomas de um resfriado e de um ataque cardíaco da mesma maneira. Então, neste momento, um "Doctor" específico (captura específica) para processamento correspondente.

Atualmente, alguns erros comuns são: ValueError, TypeError, IndexError, etc., portanto, em todo o processo de teste automatizado, inevitavelmente encontraremos muitos outros erros.Como capturar exceções quando não temos certeza sobre outros erros? Existem duas maneiras, a primeira é lembrar que quando você sente falta, assim como os amiguinhos que começaram a programar, ninguém sabe que vão encontrar o ValueError. Depois de encontrá-lo uma vez, eles prestarão atenção especial na próxima vez. Faça uma captura antecipada, comumente conhecida como pisar no fosso. A outra forma é continuar adicionando exceto no final, e também mantemos o coletor universal, para que quando a captura específica não capture uma exceção mas o programa tiver uma exceção, exceto irá capturá-la:

print("------------------- 欢迎来到报名注册系统 -------------------")
age = (input("请输入您的年龄:"))
 
try:
    age = int(age)
    if age < 18:
        print("很遗憾,您暂时不满足注册条件")
    else:
        print("恭喜您符合注册条件")
# 这里会报错ValueError,因为捕获的类型是IndexError,很明显无法进行ValueError异常捕获,那么我们可以在添加一个万能捕手except来进行捕获
except IndexError:
    print("您的年龄输入非法,请重新运行本程序")
# 在下面可以在进行一个except的添加:
except:
    print("万能捕手在此,束手就擒吧!")

 

2.6 exceto、Exceção与BaseException

Sabemos que except é um coletor universal, mas na verdade sua identidade é Exception, e Python o omite por padrão. Na verdade, é assim:

except Exception:
    print("万能捕手在此,束手就擒吧!")

exceto e exceto Exceção são completamente equivalentes e podem ser adicionados ou não na escrita diária, dependendo dos hábitos e preferências pessoais. BaseException é a classe pai de Exception, e Exception como subclasse não pode interceptar erros do tipo BaseException da classe pai.

BaseException: contém todas as exceções integradas

Exceção: não contém todas as exceções integradas, inclui apenas exceções integradas que não saem do sistema; exceções como SystemExit não estão incluídas. Todos os erros em Python são derivados da classe BaseException

2.7 uso de finalmente

A função de finalmente é executar o código em finalmente, independentemente de except capturar com sucesso a exceção correspondente:

"""
参考如下代码:打开了love.txt这个文件,进行了阅读,又想写入一点东西,但现在是只读的模式,无法进行内容写入,故此会报错io.UnsupportedOperation
虽然没有写入成功,但是这个文件是成功读取了的,那么在文件的章节中提到过,如果打开了一个文件要记得关闭,否则其他人无法使用
所以在finally这里我们就可以加上f.close(),代表着无论是否有捕捉到异常,最后我都要关闭这个文件,以确保其他人能够正常使用该文件
"""
 
import io
 
try:
    f = open("love.txt", encoding="utf-8", mode="r")
    f.read()
    f.write("随便写点~")
except io.UnsupportedOperation:
    print("抓的就是你这个io.UnsupportedOperation报错")
finally:
    # finally的作用是无论except是否成功捕获到了对应的异常,均需要执行finally下的代码
    f.close()

2.8 Impressão de informações de exceção

Embora possamos capturar a exceção, devemos saber qual é a exceção. Quando capturamos uma exceção, podemos imprimir as informações da exceção:

print("------------------- 欢迎来到报名注册系统 -------------------")
age = (input("请输入您的年龄:"))
 
try:
    age = int(age)
    if age < 18:
        print("很遗憾,您暂时不满足注册条件")
    else:
        print("恭喜您符合注册条件")
# 这里会报错ValueError,捕获的是IndexError,很明显无法进行异常捕获,那么我们可以在添加一个万能捕手except来进行捕获
except IndexError as error:
    print("您的年龄输入非法,请重新运行本程序")
# 在这里加一个as,后面接一个变量,然后进行变量打印即可,当出现对应的异常时就会打印对应异常的信息
except Exception as error:
    print("万能捕手在此,束手就擒吧!", f"已捕获异常:{error}")

Foi mencionado há pouco que except e except Exception são equivalentes, mas se você quiser usar como, você deve usar o último. Esta é a regra gramatical:

# 正确用法,在捕获类型后加as 变量
except Exception as error:
    print("万能捕手在此,束手就擒吧!", f"已捕获异常:{error}")
 
# 错误的用法,不符合语法规则
except as error:
    print("万能捕手在此,束手就擒吧!", f"已捕获异常:{error}")

Por fim, gostaria de agradecer a todos que leram meu artigo com atenção. A reciprocidade é sempre necessária. Embora não seja algo muito valioso, você pode retirá-lo se precisar:

insira a descrição da imagem aqui

Applet de entrevista de teste de software

O banco de perguntas de teste de software esgotado por milhões de pessoas! ! ! Quem é quem sabe! ! ! O mini programa de quiz mais completo de toda rede, você pode usar seu celular para fazer os quizes, no metrô ou no ônibus, enrola!

As seguintes seções de perguntas da entrevista são abordadas:

1. Teoria básica de teste de software, 2. web, aplicativo, teste de função de interface, 3. rede, 4. banco de dados, 5. linux

6. web, aplicativo, automação de interface, 7. testes de desempenho, 8. noções básicas de programação, 9. perguntas da entrevista de hora, 10. perguntas de teste abertas, 11. testes de segurança, 12. noções básicas de informática

Esses materiais devem ser o armazém de preparação mais abrangente e completo para amigos [de teste de software]. Este armazém também acompanhou dezenas de milhares de engenheiros de teste na jornada mais difícil. Espero que possa ajudar você também!     

Acho que você gosta

Origin blog.csdn.net/nhb687095/article/details/132452268
Recomendado
Clasificación