python try...except...总结

1.参考文献
https://docs.python.org/zh-cn/3/tutorial/errors.html#exceptions
https://www.liaoxuefeng.com/wiki/1016959663602400/1017598873256736
《python编程从入门到实践》10.3异常

2.try…except…应用场景
编写得很好且经过详尽测试的代码不容易出现内部错误,如语法或逻辑错误,但只要程序依赖于外部因素,如用户输入、存在指定文件、有网络链接,就有可能出现异常。
凭借经验可判断该在程序的什么地方包含异常处理块,以及出现错误时该向用户提供多少相关的信息。—《python编程从入门到实践》10.3.9 决定报告哪些错误

3.try …except…实践
当你认为可能发生了错误时,可编写一个try-except 代码块来处理可能引发的异常。

try:
    print(5/0)
except ZeroDivisionError:
    print("you can't divide by zero!")

我们将导致错误的代码行print(5/0) 放在了一个try 代码块中。如果try 代码块中的代码运行起来没有问题,Python将跳过except 代码块;如果try 代码块中的代码导致了错误,Python将查找这样的except 代码块,并运行其中的代码,即其中指定的错误与引发的错误相同。

4.else代码块
通过将可能引发错误的代码放在try-except 代码块中,可提高这个程序抵御错误的能力。错误是执行除法运算的代码行导致的,因此我们需要将它放到try-except 代码块
中。这个示例还包含一个else 代码块;依赖于try 代码块成功执行的代码都应放到else 代码块中:

print("give me two numbers,and I'll divide them")
print("Enter 'q' to quit")
while True:
    first_number = input("\nFirst number:")
    if first_number == 'q':
        break
    second_number = input("Second number.")
    try:
        answer = int(first_number)/int(second_number)
    except Exception as e: 
        print("type error: " + str(e))
    else:
        print(answer)

try-except-else 代码块的工作原理大致如下:Python尝试执行try 代码块中的代码;只有可能引发异常的代码才需要放在try 语句中。有时候,有一些仅在try 代码块成功
执行时才需要运行的代码;这些代码应放在else 代码块中。except 代码块告诉Python,如果它尝试运行try 代码块中的代码时引发了指定的异常,该怎么办。
5.finally代码块
finally 子句 总会在离开 try 语句前被执行,无论是否发生了异常。

def divide(x,y):
    try:
        result = x/y
    except Exception as e:
        print("error:%s",e)
    else:
        print("result is:",result)
    finally:
        print("good bye!!!")

测试:

devide(2,1)

运行结果:

result is: 2.0
good bye!!!

测试:

devide(2,0)

运行结果:

error:%s division by zero
good bye!!!

测试:

devide("2","1")

运行结果:

error:%s unsupported operand type(s) for /: 'str' and 'str'
good bye!!!

正如你所看到的,finally 子句在任何情况下都会被执行。
在实际应用程序中,finally 子句对于释放外部资源(例如文件或者网络连接)非常有用,无论是否成功使用资源。

你可能感兴趣的:(python)