Este tipo de instrução é um método de multiprocessamento de múltiplas instruções except. Vamos aprender o aninhamento de instruções try...except por meio de um exemplo.
deftest():n=int(input('Existem 3 instruções para testar, selecione (1/2/3):')) ifn==1: #keyError exceção my_dict={'dotcpp':123}print ( my_dict['ponto'])elifn==2:#IndexError exceção my_list=[1,2,3,4,5]print(my_list[100])eli fn==3:#NameError exceção print('variável inexistente dotcpp:',dotcpp)try:try:try:test()exceptKeyError:print('Exceção KeyError')exceptIndexError:print('Exceção IndexError')exceptNameError: print('Exceção NameError')
Testamos 1/2/3 respectivamente e os resultados de saída são os seguintes:
Existem 3 instruções a serem testadas, selecione (1/2/3): exceção 1KeyError Existem 3 instruções a serem testadas, selecione (1/2/3): exceção 2IndexError Existem 3 instruções a serem testadas, selecione (1/2/3): exceção 3NameError
Neste exemplo, primeiro inserimos um julgamento n na função definida e, em seguida, damos três situações de exceção com base no valor de n e, em seguida, aninhamos três declarações try..except no final, ou seja, O resultado do A instrução test() passará por três níveis de julgamento.
Um mecanismo completo de tratamento de exceções é inseparável da instrução finalmente . A função desta instrução é que, independentemente de ocorrer uma exceção em nosso programa, o código sob a instrução finalmente será executado.
tente:blockexcept[typeerror]:deal1finalmente:deal2
Vamos dar uma olhada nesta estrutura através de um exemplo:
deftest():n=int(input('Por favor, insira um número inteiro:'))print(n)try:test()exceptKeyError:print('Exceção KeyError')finalmente:print('finalmente a instrução foi executada')
Vamos inserir 6 e dotcpp respectivamente para ver o resultado:
Por favor, insira um número inteiro: 55instrução finalmente foi executada Por favor, insira um número inteiro: a instrução dotcppfinalmente foi executada Traceback(mostrecentcalllast):FileC:/Users/test.py,line5,in<module> test()FileC:/Users/test.py,line2,intestn=int(input('Por favor, insira um número inteiro:'))ValueError: invalidliteralforint()withbase10:'dotcpp'
A partir deste exemplo, podemos ver que a instrução finalmente será executada independentemente de ocorrer uma exceção em nosso programa.
A instrução finalmente que aprendemos acima é uma instrução que será executada independentemente de ocorrer uma exceção na instrução. A instrução try...except...else que aprenderemos a seguir só será executada quando nenhuma exceção ocorrer no programa. Sua estrutura de sintaxe é:
tente:blockexcept[typeerror]:deal1else:deal2
Vejamos um exemplo abaixo:
deftest():n=int(input('Por favor, insira um número inteiro:'))print('O valor de entrada é:',n)try:test()exceptValueError:print('Exceção ValueError')else:print(' Atual Nenhuma exceção ocorreu no programa')
A saída é:
Insira um número inteiro: 5. O valor de entrada é: 5. Não há exceção no programa atual.
Quando inserimos o valor dotcpp
Insira um número inteiro: exceção dotcppValueError
Podemos ver que a instrução else não é executada quando o programa está anormal. Não é difícil distinguir essas instruções. Você pode praticar essas instruções de tratamento de exceções comumente usadas por meio de exemplos.