Python异常处理——try...except、主动引发异常(raise)、断言(assert)


Python习题十


一、 编写函数devide(x, y),x为被除数,y为除数。要求考虑异常情况的处理。
1、 被零除时,输出”division by zero! “;
2、 类型不一致时,强制转换为整数再调用本函数;
3、 若没有上述异常则输出计算结果。

源代码:

class DTError(Exception):  #感觉不写也可以呀 但是没有这个类定义 下面的DTError就会报错
    pass


def devide(x,y):
    try: 
        ans=x/y
        if(type(x)!=type(y)):  #如果两个数类型不同,抛出异常
            raise DTError

    except ZeroDivisionError:   #抛出除数为0的异常
        return 'division by zero!'

    except DTError:   #类型不同的异常
        print ('The two nums have differet type')  #先提示类型不同
        x=int(x)  #将x,y强制转换成int,再次调用函数。本来在这个位置嵌套了一个捕捉异常,后来发现没有必要,就删除了
        y=int(y)
        devide(x,y)
        return ans

    except:
        return 'other problems, angry'  #对 我很气

    else:
        return ans

运行结果:

Python异常处理——try...except、主动引发异常(raise)、断言(assert)_第1张图片


二、 编写函数test(password, earning, age)用于检测输入错误。要求输入密码password第一个符号不能是数字,工资earnings的范围是0—20000,工作年龄的范围是18—70。使用断言来实现检查,若三项检查都通过则返回True。

def test(password, earning, age):
    #assert 1<0
    assert password[0] not in ['0','1','2','3','4','5','6','7','8','9']
    assert int(earning)>=0 and int(earning)<=20000
    assert int(age)>=18 and int(age)<=70
    return True

运行结果:

Python异常处理——try...except、主动引发异常(raise)、断言(assert)_第2张图片

Python异常处理——try...except、主动引发异常(raise)、断言(assert)_第3张图片

你可能感兴趣的:(Python)