异常处理

程序一旦发生错误,就从错误的位置停下来,不再继续执行后面的内容,但你依旧需要接着执行,就会使用到异常处理;
常用于小的段代码进行异常处理,而非整段代码都使用异常处理

# 需求忽略错误,接着执行
ret = int(input('请输入数字:'))
print(ret*'*')

万一用户输入非数字,则会抛出异常。
使用try 和 except就能处理异常:
    1、try 是我们需要处理的代码;
    2、except 后面跟一个错误类型 当代码发生错误且错误类型符合的时候,就会执行except中的代码;
    3、except支持多分支(即可以有多个except);

# 如果输入非数字就会抛出异常
try:
    [][2]
    print('1111')
    ret = int(input('请输入数字:'))
    print(ret * '*')
except ValueError:
    print('输入有误,请输入数字')
except IndexError:
    print('超出长度了')

万能异常处理 --- Exception
    1、有了万能的处理机制,仍然需要把能预测到的问题单独处理;
    2、单独处理的所有内容都应该写在万能异常之前;

try:
    print('0000')
    [][2]
    print('1111')
    1/0
    print('2222')
    ret = int(input('请输入数字:'))
    print(ret * '*')
except ValueError:
    print('输入有误,请输入数字')
except Exception:
    print('出现Bug')

else: try执行过程中没有发生任何异常,就接着执行else后的代码

try:
    # print('0000')
    # [][2]
    # print('1111')
    # 1/0
    print('2222')
    ret = int(input('请输入数字:'))
    print(ret * '*')
except ValueError:
    print('输入有误,请输入数字')
except Exception:
    print('出现Bug')
else:
    print('没有BUG')

finally: 不管代码是否异常,都会执行。
    1、finally 和 return相遇的时候,依然会执行;
        1.1、在return之前会先执行finally后的内容,执行完成后才将值返回。
   2、 函数里做异常处理用,不管是否异常去做一些收尾工作;

def func():
    try:
        f = open('test','w')
        # sdfsfd
        return True
    except Exception:
        return False
    finally:
        f.close()
        print('不管是否报错,都关闭文件')

print(func())

遇到异常时,返回错误的内容--给异常起别名,并打印输出错误内容。

try:
    ret = int(input('请输入数字:'))
    print(ret * '*')
except ValueError as error:
    print('输入有误,请输入数字',error)

 

posted on 2019-03-22 16:40  Jerry-Wang  阅读(197)  评论(0)    收藏  举报