实验七 Python错误与异常处理

 1. 从键盘输入一个整数,求 100 除以它的商,并显示输出。要求对从键盘输入的数值进行异常处理。

try:
    n = int(input("请输入一个整数:"))
    x = 100 / n
    print(x)
except ValueError:
    print("异常,请重新输入:")
else:  # 可选项,必须try-except语句为前提
    print("程序正常运行,没有捕捉到异常")

2.编程实现索引超出范围异常 Index Error 类型。例如:chars=["a","b",100,-37,2]

try:
    chars = ["a", "b", 100, -37, 2]
    chars[5] = "k"  # 产生该类型异常
except IndexError:
    print("异常,索引超出范围")
else:  # 可选项,必须try-except语句为前提
    print("程序正常运行,没有捕捉到异常")

 3.录入一个学生的成绩,把该学生的成绩转换为 A 优秀、B 良好、C 合格、D 不及格的形式,最后将该学生的成绩打印出来。要求使用 assert 断言处理分数不合理的情况。

try:
    score = int(input('请输入学生的成绩:'))
    assert 0 <= score <= 100  # 断言 成绩必须在0-100范围内
    if score >= 90:
        print("A优秀")
    if score >= 80 and score < 90:
        print("B良好")
    if score >= 60 and score < 80:
        print("C合格")
    if score < 60:
        print("D不及格")
except ValueError:
    print("异常,输入必须为整数")
except AssertionError:  # 断言异常信息
    print(f"异常,输入的成绩{score}不在0-100范围内")
else:  # 可选项,必须try-except语句为前提
    print("程序正常运行,没有捕捉到异常")

4. (选做)定义一个 Circle 类,其中有求面积的方法,当半径小于 0 时, 抛出一个用户自定义异常

import math

class RangeErrorException(Exception):  # 自定义异常类,判断半径范围是否异常
    def __init__(self, error_reason='异常,圆的半径不能为负数!'):
        Exception.__init__(self, error_reason)  # 定义的继承自Exception的类RangeErrorException


class Circle():
    def __init__(self, r):
        self.r = r
        if self.r < 0:  # 当遇到自己设定的错误时,使用raise语句抛出自定义的异常
            raise RangeErrorException

    def getS(self):  # 计算获取圆的面积
        area = math.pi * self.r * self.r
        return area

try:
    r = eval(input("请输入半径r:"))
    c = Circle(r)
    print(f"面积为:{c.getS():.2f}")
except RangeErrorException as reason:
    print(reason)
else:  # 可选项,必须try-except语句为前提
    print("程序正常运行,没有捕捉到异常")

5. 假设成年人的体重和身高存在此种关系:

身高(厘米)-100=标准体重(千克)

如果一个人的体重与其标准体重的差值在 其体重的正负 5%之间,显示“体重正常”,其他则显示“体重超标”或者“体重不达标”。编写程序,能处理用户输入的异常并且使用自定义异常类来处理身高小于 30cm、大于 250cm 的异常情况。

class HighErrorException(Exception):
    def __init__(self, error_reason='异常,身高不能小于30cm或者大于250cm'):  # 自定义异常类,判断身高是否异常
        Exception.__init__(self, error_reason)  # 定义的继承自Exception的类HighErrorException

class relation:
    def __init__(self, high, weight):
        self.high = high
        self.weight = weight
        if self.high < 30 or self.high > 250:
            raise HighErrorException  # 当遇到自己设定的错误时,使用raise语句抛出自定义的异常

    def rel(self):
        y = self.weight - (self.high - 100)
        if abs(y) <= self.weight * 0.05:
            print("体重正常")
        elif y > self.weight * 0.05:
            print("体重超标")
        elif y < -self.weight * 0.05:
            print("体重不达标")


try:
    h = eval(input("请输入身高(cm):"))
    w = eval(input("请输入体重(kg):"))
    f = relation(h, w)
    f.rel()
except HighErrorException as reason:
    print(reason)
else:  # 可选项,必须try-except语句为前提
    print("程序正常运行,没有捕捉到异常")

6.(选做)设计一个一元二次方程类,并为这个类添加异常处理。

import math

class FunctionErrorException(Exception):
    def __init__(self, error_reason='判别式<0,函数不存在实根'):
        Exception.__init__(self, error_reason)

class Equation:
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

    def getDiscriminant1(self):  # 判别式
        d = (self.b) ** 2 - (4 * self.a * self.c)
        return d

    def getRoot1(self):
        if self.getDiscriminant1() >= 0:
            x1 = (-self.b + math.sqrt(self.getDiscriminant1())) / 2 * self.a
            return x1
        else:
            raise FunctionErrorException

    def getRoot2(self):
        if self.getDiscriminant1() >= 0:
            x2 = (-self.b + math.sqrt(self.getDiscriminant1())) / 2 * self.a
            return x2
        else:
            raise FunctionErrorException

try:
    a = eval(input("请输入系数a:"))
    b = eval(input("请输入系数b:"))
    c = eval(input("请输入系数c:"))
    f = Equation(a, b, c)
    print("判别式:", f.getDiscriminant1())
    print("   x1:", f.getRoot1())
    print("   x2:", f.getRoot2())
except FunctionErrorException as reason:
    print(reason)
else:  # 可选项,必须try-except语句为前提
    print("程序正常运行,没有捕捉到异常")

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再见以前说再见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值