51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 561|回复: 0
打印 上一主题 下一主题

[python] 想轻松掌握Python异常捕获 手把手带你完成6题即可

[复制链接]
  • TA的每日心情
    擦汗
    2024-5-31 09:15
  • 签到天数: 44 天

    连续签到: 1 天

    [LV.5]测试团长

    跳转到指定楼层
    1#
    发表于 2022-9-6 15:42:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    0. 前言
    由于 Python 直接从源代码运行程序,在 Python 测试或运行代码之前没有编译器进行代码分析,因此测试和异常处理是 Python 程序开发的中的重要组成部分,我们就通过 6 道 Python 编程题来掌握常见异常处理的方法吧!


    1. 第 1 题:在单元测试中测试异常
    知识点描述:使用测试用例判断异常是否被抛出。
    问题描述:测试某个函数抛出的 KeyError 异常的情况,请从以下选项中选出你认为正确的选项:
    A.
    1. import unittest
    2. def parse_dict(dictionary, key):
    3.     return dictionary[key]
    4. class TestConversion(unittest.TestCase):
    5.     def test_bad_key(self):
    6.         self.assertRaises(KeyError, parse_dict, 'NULL')
    复制代码
    B.
    1. import unittest
    2. def parse_dict(dictionary, key):
    3.     return dictionary[key]
    4. class TestConversion(unittest.TestCase):
    5.     def test_bad_key(self):
    6.         self.assertRaises(KeyError)
    复制代码
    C.
    1. import unittest
    2. def parse_dict(key):
    3.     return key
    4. class TestConversion(unittest.TestCase):
    5.     def test_bad_key(self):
    6.         self.assertRaises(KeyError)
    复制代码
    D.
    1. import unittest
    2. def parse_dict(key):
    3.     return key
    4. class TestConversion(unittest.TestCase):
    5.     def test_bad_key(self):
    6.         self.assertRaises(KeyError, parse_dict, 'NULL')
    复制代码

    正确答案: A

    2. 第 2 题:多个异常的处理

    知识点描述:处理一个代码片段可能抛出的多个不同异常。
    问题描述:有一个可能抛出多个不同异常的代码段,如何使用简洁的代码处理所有可能的异常:
    A.

    1. from urllib import error, request
    2. urls = ['https://blog.csdn.net','https://www.baidu.com/aaa', 1, 'https://error.url']
    3. for url in urls:
    4.     try:
    5.         request.urlopen(url)
    6.     except (error.URLError, AttributeError):
    7.         urls.remove(url)
    8. print(urls)
    复制代码

    B.

    1. from urllib import error, request
    2. urls = ['https://blog.csdn.net','https://www.baidu.com/aaa', 1, 'https://error.url']
    3. for url in urls[::-1]:
    4.     try:
    5.         request.urlopen(url)
    6.     except AttributeError:
    7.         urls.remove(url)
    8. print(urls)
    复制代码

    C.

    1. from urllib import error, request
    2. urls = ['https://blog.csdn.net','https://www.baidu.com/aaa', 1, 'https://error.url']
    3. for url in urls[::-1]:
    4.     try:
    5.         request.urlopen(url)
    6.     except error.URLError:
    7.         urls.remove(url)
    8. print(urls)
    复制代码

    D.

    1. from urllib import error, request
    2. urls = ['https://blog.csdn.net','https://www.baidu.com/aaa', 1, 'https://error.url']
    3. for url in urls[::-1]:
    4.     try:
    5.         request.urlopen(url)
    6.     except (error.URLError, AttributeError):
    7.         urls.remove(url)
    8. print(urls)
    复制代码

    正确答案: D

    3. 第 3 题:捕获所有异常

    知识点描述:捕获代码中存在的所有异常。
    问题描述:如何捕获代码中存在的所有异常,请从以下选项中选出你认为正确的选项:
    A.

    1. list_1 = [...]
    2. list_2 = [...]
    3. def add_list(list_1, list_2):
    4.     for i in range(len(list_1)):
    5.         r = list_1[i] + list_2[i+1]
    6. try:
    7.     add_list(list_1, list_2)
    8. except Exception as error:
    9.     print(e)
    复制代码

    B.

    1. list_1 = [...]
    2. list_2 = [...]
    3. def add_list(list_1, list_2):
    4.     for i in range(len(list_1)):
    5.         r = list_1[i] + list_2[i+1]
    6. try:
    7.     add_list(list_1, list_2)
    8. except Exception as e:
    9.     print(e)
    复制代码

    C.

    1. list_1 = [...]
    2. list_2 = [...]
    3. def add_list(list_1, list_2):
    4.     for i in range(len(list_1)):
    5.         r = list_1[i] + list_2[i+1]
    6. try:
    7.     add_list(list_1, list_2)
    8. except Exception:
    9.     print(e)
    复制代码

    D.

    1. list_1 = [...]
    2. list_2 = [...]
    3. def add_list(list_1, list_2):
    4.     for i in range(len(list_1)):
    5.         r = list_1[i] + list_2[i+1]
    6. try:
    7.     add_list(list_1, list_2)
    8. except Exception:
    9.     print(Exception)
    复制代码

    正确答案: B

    4. 第 4 题:创建自定义异常

    知识点描述:将异常包装成自定义异常。
    问题描述:在构建的网络相关程序中,定义自定义异常,请从以下选项中选出你认为正确的选项:
    A.

    1. class NetworkError(Exception):
    2.     def __init__(self, message, status):
    3.         super.__init__(self, message, status)
    4.         self.message = message
    5.         self.status = status
    复制代码

    B.

    1. class NetworkError(Exception):
    2.     def __init__(self, message, status):
    3.         self.message = message
    4.         self.status = status
    复制代码

    C.

    1. class NetworkError(Exception):
    2.     def __init__(self, message, status):
    3.         super().__init__(self, message, status)
    4.         self.message = message
    5.         self.status = status
    复制代码

    D.

    1. class NetworkError(Exception):
    2.     def __init__(self, message, status):
    3.         super().__init__(message, status)
    4.         self.message = message
    5.         self.status = status
    复制代码

    正确答案: C

    5. 第 5 题:捕获异常后抛出其他异常

    知识点描述:捕获一个异常后抛出另一个异常。
    问题描述:捕获一个异常后抛出另一个异常,同时在异常回溯中保留两个不同异常的信息,请从以下选项中选出你认为正确的答案:
    A.

    1. example = {'python': 'simple', 'c': 'fast'}
    2. try:
    3.     print(example['java'])
    4. except ValueError as e:
    5.     raise RuntimeError('A error occurred') from e
    复制代码

    B.

    1. example = {'python': 'simple', 'c': 'fast'}
    2. try:
    3.     print(example['java'])
    4. except KeyError as e:
    5.     raise RuntimeError('A error occurred') from e
    复制代码

    C.

    1. example = {'python': 'simple', 'c': 'fast'}
    2. try:
    3.     print(example['java'])
    4. except TypeError as e:
    5.     raise RuntimeError('A error occurred') from e
    复制代码

    D.

    1. from datetime import datetime
    2. def hello_world(num):
    3.     return "Hello world {}!".format(num)
    4. for i in range(10):
    5.     with open('log.txt', 'wt') as f:
    6.         print(str(datetime.today()) + '\t' + hello_world(i), file=f)
    复制代码

    正确答案: B

    6. 第 6 题:重新抛出被捕获的异常

    知识点描述:在 except 块中捕获异常后,重新将错误抛出。
    问题描述:在一个 except 代码块中捕获一个异常,但是之后想要将其重新抛出,请从以下选项中选出你认为正确的答案:
    A.

    1. example = {'python': 'simple', 'c': 'fast'}
    2. try:
    3.     print(example['java'])
    4. except KeyError as e:
    5.     print(example)
    6.     raise
    复制代码

    B.

    1. example = {'python': 'simple', 'c': 'fast'}
    2. try:
    3.     print(example['java'])
    4. except KeyError as e:
    5.     print(example)
    6.     raise RuntimeError
    复制代码

    C.

    1. example = {'python': 'simple', 'c': 'fast'}
    2. try:
    3.     print(example['java'])
    4. except ValueError as e:
    5.     print(example)
    6.     raise RuntimeError
    复制代码

    D.

    1. example = {'python': 'simple', 'c': 'fast'}
    2. try:
    3.     print(example['java'])
    4. except ValueError as e:
    5.     print(example)
    6.     raise
    复制代码

    正确答案: A

    试题代码地址

    https://codechina.csdn.net/LOVEmy134611/python_problem



    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-6-12 03:44 , Processed in 0.070897 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表