【第七天】Python的异常处理

作者: 人生苦短_我用Python | 来源:发表于2018-03-19 21:21 被阅读11次

3.5异常处理

1.bug

语法错误
运行时错误
语义错误

2.Debug

3.异常处理

对于运行时可能产生的错误,我们可以提前在程序中操作
这样做有两个可能的目的:
(1)让程序终止前进行更多的操作,比如提供更多关于错误的信息
(2)让程序在犯错后依然能运行下去

异常处理还能提高程序容错性,例如

while True:
    inputStr = input("Please input a number:")  #等待输入
    try:
        num = float(inputStr)
        print("Input number:",num)
        print("result:",10/num)
    except ValueError:
        print("Illegal input. Try Again.")
    except ZeroDivisionError:
        print("Illegal devision by zero. Try Again.")
Please input a number:2
Input number: 2.0
result: 5.0
Please input a number:-2
Input number: -2.0
result: -5.0
Please input a number:11
Input number: 11.0
result: 0.9090909090909091
Please input a number:-11
Input number: -11.0
result: -0.9090909090909091
Please input a number:0
Input number: 0.0
Illegal devision by zero. Try Again.
Please input a number:p
Illegal input. Try Again.
Please input a number:

需要异常处理的程序包裹在try结构中,而except说明了当特定错误发生时
程序该如何应对,程序中,input()是一个内置函数,用来接收命令行的输入
而float()函数则用于把其他类型的数据转换为浮点数
如果输入的是一个字符串,如“p”,则无法转换为浮点数
并触发ValueError,而相应的except就会运行隶属于它的程序
如果输入的是0,那么除法的分母为0,将触发ZeroDivisionError
这两种错误都是由预设的程序处理的,所以程序运行不会终止

如果没有发生异常,比如输入2,那么try部分正常运行,except部分被跳过
异常处理完整语法为:

try:
    ...
except exception1:
    ...
except exception2:
    ...
else:
    ...
finally:
    ...

如果try中有异常发生时,将执行异常归属,执行except
异常层层比较,看是否是exception1,exception2...
直到找到其归属,执行相应except中的语句
如果try中没有异常,那么except部分跳过,执行else中的语句
finally是无论是否发生异常,最后都要做的事

如果except后面没有任何参数,那么表示所有的exception都交给这段程序处理
例如:

while True:
    inputStr = input("Please input a number:")
    try:
        num = float(inputStr)
        print("Input number:",num)
        print("result:",10/num)
    except:
        print("Something Wrong.Try Again.")
Please input a number:p
Something Wrong.Try Again.
Please input a number:2.5
Input number: 2.5
result: 4.0
Please input a number:3.5564
Input number: 3.5564
result: 2.8118321898549095
Please input a number:

如果无法将异常交给合适对象,那么异常将继续向上层抛
直到被捕捉或者造成主程序报错,例如:

def test_func()
    try:
        m = 1/0
    except ValueError:
    print("Catch ValueError in the sub-function")
try:
    test_func()
except ZeroDivisionError:
    print("Catch error in the main program")
Catch error in the main program

子程序的try...except...结构无法处理相应的除以0的错误
所以错误被抛给上层程序

相关文章

  • python的异常处理

    Python异常处理

  • Python 异常

    Python 含有异常处理机制来帮助用户处理可能发生的错误异常。 1. 异常概念 异常是指Python程序运行过程...

  • Python学习(八)

    异常处理 Python中的异常类型总结: Python内置异常类的层次结构: 异常检测 try-except语句 ...

  • Python黑帽编程2.7 异常处理

    Python黑帽编程2.7 异常处理 Python黑帽编程2.7异常处理 异常是个很宽泛的概念,如果程序没有按预想...

  • Python错误处理机制

    @(python程序员)[Python] Python Cookbook 捕获所有的异常 处理异常的时候最好还会尽...

  • Python异常处理

    Python中文件的操作 Python异常的处理 异常的引发 try⋯finally的使用

  • python学习笔记之--异常处理

    类似于C++/Java等高级语言,python也有异常的处理机制 异常捕获和处理 在python语言中python...

  • (三)python错误与异常&面向对象编程

    python错误与异常 语法错误与定位 异常捕获、异常处理 try:xxxexcept: 自定义异常 python...

  • python基础2

    Python的异常处理机制 Bug的常见类型 被动掉坑的解决方案 python提供了异常处理机制,可以在异常出现时...

  • Python异常处理

    参考 Python菜鸟教程错误与异常 Python 异常处理 错误和异常 Python中(至少)有两种错误:语法错...

网友评论

    本文标题:【第七天】Python的异常处理

    本文链接:https://www.haomeiwen.com/subject/mvkmqftx.html