美文网首页python入门
python第33课练习—异常处理:try-except、try

python第33课练习—异常处理:try-except、try

作者: YoYoYoo | 来源:发表于2019-06-05 16:54 被阅读0次

    1、用什么方法来处理程序中的异常?

    答:使用try......except搭配来捕获处理程序中出现的异常。

    try:
         检测范围
    except Exception[as reson]:
         出现异常(Exception)后的处理代码
    

    2、 一个try语句可以和多个except语句搭配吗?为什么?

    答:可以。因为try语句块中可能出现多类异常,利用多个except语句可以分别捕获并处理我们感兴趣的异常。

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

    3、你知道如何统一处理多类异常吗?

    答:在except后边使用小括号“()”把多个需要统一处理的异常括起来:

    try:
        a = int('111')
        sum = 1 + '1'
        f = open('我是一个不存在的文档.txt')
        print(f.read())
    except (OSError,TypeError,ValueError) as reason:
        print('出错了!错误的原因是:'  + str(reason))
    

    注意:执行起来好像只能按顺序报一次错

    4、except后如果不带任何异常类,Python会捕获所有(try语句块内)的异常统一处理,但不建议这么做,你知道为什么吗?

    答:因为它会隐藏所有程序员未想到并且未做好准备的错误,例如用户输入ctrl+c试图终止程序会被解释为KeyboardInterrupt异常。

    5、如果异常发生在成功打开文件后,Python跳到except语句执行,并没有执行关闭文件的命令(用户写入的数据就可能没有保存起来),因此我们需要确保无论如何(就算出了异常退出)文件也要被关闭,我们应该怎么做?

    答:我们可以用finally语句来实现,如果try语句块中没有出现任何运行时的错误,会跳过except语句块执行finally语句块的内容。
    如果出现异常,则会先执行except语句块的内容再接着执行finally语句块的内容。总之,finally语句块内的内容就是确保无论如何都能被执行的内容!

    6、请恢复以下代码中被马赛克挡住的内容,使得程序执行后可以按要求输出。

    image.png

    参考答案:

    try:
        for i in range(3):
            for j in range(3):
                if i == 2:
                    raise KeyboardInterrupt
                print(i,j)
    except KeyboardInterrupt:
        print('退出啦!')
    

    7、还记得之前第一个小游戏吗?只要用户输入非整型数据,程序就会立刻蹦出不和谐的异常信息然后崩溃。请使用刚学的异常处理方法修改以下程序,提高用户体验。

    import random
    
    secret = random.randint(1,10)
    print('----------------鱼C工作室-----------------')
    temp = input('不妨猜一下小甲鱼现在心里想的数字:')
    guess =int(temp)
    while guess != secret:
        temp = input('哎呀,猜错了,请重新输入吧:')
        guess = int(temp)
        if guess == secret:
            print('卧槽,你是小甲鱼心里的蛔虫吗?!')
            print('哼,猜中了也没有奖励!')
        else:
            if guess > secret:
                print('哥,大了大了~~~')
            else:
                print('嘿,小了小了~~~~')
    print('游戏结束,不玩了!')
    

    参考答案:

    import random
    
    secret = random.randint(1,10)
    print('----------------鱼C工作室-----------------')
    temp = input('不妨猜一下小甲鱼现在心里想的数字:')
    
    # 添加此处
    try:
        guess = int(temp)
    except ValueError:
        print('输入错误!')
        guess = secret
        
    while guess != secret:
        temp = input('哎呀,猜错了,请重新输入吧:')
        guess = int(temp)
        if guess == secret:
            print('卧槽,你是小甲鱼心里的蛔虫吗?!')
            print('哼,猜中了也没有奖励!')
        else:
            if guess > secret:
                print('哥,大了大了~~~')
            else:
                print('嘿,小了小了~~~~')
    print('游戏结束,不玩了!')
    

    8、input()函数有可能产生两类异常: EOFError(文件末尾endoffile,当用户按下组合键Ctrl+d产生)和KeyboardInterrupt(取消输入,用户按下ctrl+c产生),再次修改上边的代码,捕获处理input()的两类异常,提高用户体验。

    参考答案:

    import random
    
    secret = random.randint(1,10)
    print('----------------鱼C工作室-----------------')
    
    try:
        temp = input('不妨猜一下小甲鱼现在心里想的数字:')
        guess = int(temp)
    except (ValueError,EOFError,KeyboardInterrupt):
        print('输入错误!')
        guess = secret
        
    while guess != secret:
        temp = input('哎呀,猜错了,请重新输入吧:')
        guess = int(temp)
        if guess == secret:
            print('卧槽,你是小甲鱼心里的蛔虫吗?!')
            print('哼,猜中了也没有奖励!')
        else:
            if guess > secret:
                print('哥,大了大了~~~')
            else:
                print('嘿,小了小了~~~~')
    print('游戏结束,不玩了!')
    

    9、尝试一个新的函数int_input(),当用户输入整数的时候正常返回,否则提示出错并要求重新输入。

    参考答案:

    def int_input(prompt=''):
        while True:
            try:
                int(input(prompt))
                break
            except ValueError:
                print('出错,您输入的不是整数!')
    
    int_input('请输入一个整数:')
    

    10、把文件关闭放在finally语句块中执行还是会出现问题,像下边这个代码,当前文件夹中并不存在“My_File.txt”这个文件,那么程序执行起来会发生什么事情呢?你有办法解决这个问题吗?

    try:
        f = open('My_File.txt') # 当前文件夹中并不存在My_File.txt这个文件
        print(f.read())
    except OSError as reason:
        print('出错啦:' + str(reason))
    finally:
        f.close()
    

    答:由于finally语句块里试图取关闭一个没有成功打开的文件,因此会弹出错误内容如下:

    出错啦:[Errno 2] No such file or directory: 'My_File.txt'
    Traceback (most recent call last):
      File "C:/Users/dybhh/Desktop/pypractice/33-4.py", line 7, in <module>
        f.close()
    NameError: name 'f' is not defined
    

    我们这么修正:

    try:
        f = open('My_File.txt') # 当前文件夹中并不存在My_File.txt这个文件
        print(f.read())
    except OSError as reason:
        print('出错啦:'+ str(reason))
    finally:
        if 'f' in locals(): # 如果文件对象变量存在当前局部变量符号表的话,说明打开成功
            f.close()
    

    相关文章

      网友评论

        本文标题:python第33课练习—异常处理:try-except、try

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