大鹏

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

第九章 异常处理

本章节内容如下:

    1、 Python 标准异常总结
    2、try-except语句
    3、针对不同的异常设置多个except
    4、对多个异常统一处理
    5、捕获所有异常
    6、try-finally语句
    7、raise 语句
    8、丰富的else
    9、简洁的with语句
    10、作业

    11、扩展阅读



1、 Python 标准异常总结

 

2、try-except语句

 

#示例
try:
    f = open('我为什么是一个文档.txt')  #文档不存在时,会报错
    print(f.read())
    f.close()
except OSError:
    print('文件打开的过程中出错啦T_T')
#使用as把具体错误的信息打印出来
try:
    f = open('我为什么是一个文档.txt')
    print(f.read())
    f.close()
except OSError as reason:
    print('文件打开的过程中出错啦T_T\n错误原因是:' + str(reason)) 
    
"""
文件打开的过程中出错啦T_T
错误原因是:[Errno 2] No such file or directory: '我为什么是一个文档.txt'
"""

 

 

3、针对不同的异常设置多个except

try:
    sum = 1 + '1'
    f = open('我是一个不存在的文档.txt')
    print(f.read())
    f.close()
except OSError as reason:
    print('文件出错啦T_T\n错误原因是:' + str(reason))
except TypeError as reason:
    print('类型出错啦T_T\n错误原因是:' + str(reason))

 

4、对多个异常统一处理

#except 后面可以跟多个异常,然后对这些异常统一处理
try:
    int('abc')
    sum = 1 + '1'
    f = open('我是一个不存在的文档.txt')
    print(f.read())
    f.close()
except (OSError, TypeError):
    print('出错啦T_T\n错误原因是:' + str(reason))

 

5、捕获所有异常

try:
    int('abc')
    sum = 1 + '1'
    f = open('我是一个不存在的文档.txt')
    print(f.read())
    f.close()
except:
    print('出错啦')

#不建议这么做,因为它会隐藏所有程序员未想到并且未做好处理准备的错误
#另外try语句检测范围内一旦出现异常,剩下的语句不会被执行

 

 6、try-finally语句

 

try:
    f = open('我是一个不存在的文档.txt')
print(f.read())
    sum = 1 + '1'
except:
    print('出错啦')
finally:
    f.close()  #都会被执行

 

7、raise 语句

使用raise 语句 会自动抛出异常

raise ZeroDivisionError

"""
    raise ZeroDivisionError
ZeroDivisionError
"""

 

 8、丰富的else

1、要么怎样,要么不怎样

典型的if -else 搭配

if 条件:
    条件为真执行
else:
    条件为假执行

 

 2、干完了能怎样,干不完就别想怎样

while -else

def showMaxFactor(num):
    count = num // 2
    while count > 1:
        if num % count == 0:
            print('%d最大的约数是%d' % (num, count))
            break
        count -= 1
    else:
        print('%d是素数!' % num)

num = int(input('请输入一个数:'))
showMaxFactor(num)

 

 for -else

age_of_oldboy = 56
for i in range(3):
    guess_age = int(input("guess age:") )
    if guess_age == age_of_oldboy :
        print("yes, you got it. ")
        break
    elif guess_age > age_of_oldboy:
        print("think smaller...")
    else:
        print("think bigger!")
else:
    print("you have tried too many times..fuck off")

 

 3、没有问题,那就干吧

try:
    int('abc')
except ValueError as reason:
    print('出错啦:' + str(reason))
else:
    print('没有任何异常!')

 

9、简洁的with语句

try:
    f = open('data.txt', 'w')
    for each_line in f:
        print(each_line)
except OSError as reason:
    print('出错啦:' + str(reason))
finally:
    f.close()

使用with语句可以改成这样的:

try:
    with open('data.txt', 'w') as f:
        for each_line in f:
            print(each_line)
except OSError as reason:
    print('出错啦:' + str(reason))

 

10、作业

 [课后作业] 第032讲:异常处理:你不可能总是对的 | 课后测试题

[课后作业] 第033讲:异常处理:你不可能总是对的2 | 课后测试题

[课后作业] 第034讲:丰富的else语句及简洁的with语句 | 课后测试题

 

11、扩展阅读

 异常处理

 

posted on 2018-12-16 10:23  pf42280  阅读(199)  评论(0)    收藏  举报