Python异常处理实战:从基础输入校验到自定义异常类设计

木白
木白
发布时间:2026-10-15| 5人浏览过
原创

本文通过六个具体编程案例,系统讲解Python中的异常处理机制。内容涵盖使用try-except处理ValueError和IndexError,利用assert进行断言校验,以及定义继承自Exception的自定义异常类。示例包括整数除法、列表索引越界、成绩等级转换、圆面积计算、身高体重关系判断及一元二次方程求解,帮助开发者掌握健壮代码的编写技巧。

基础异常处理:整数输入与除零处理

编写程序,从键盘接收一个整数输入,计算100除以该整数的商并输出结果。在此过程中,必须对用户的输入值进行异常处理,以应对可能的非法输入或除零错误。

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

索引越界异常(IndexError)示例

编程演示如何处理索引超出范围异常(IndexError)。例如,定义一个包含字符串和数字的列表chars=["a","b",100,-37,2],尝试访问或修改不存在的索引位置,从而触发该类型异常。

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

使用断言(assert)进行成绩校验

录入一名学生的成绩,并将其转换为等级制: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("异常,输入的成绩{}不在0-100范围内".format(score))
else:         #可选项,必须try-except语句为前提
    print("程序正常运行,没有捕捉到异常")

自定义异常类:圆半径合法性检查

定义一个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("面积为:{:.2f}".format(c.getS()))
except RangeErrorException as reason:
    print(reason)
else:         #可选项,必须try-except语句为前提
    print("程序正常运行,没有捕捉到异常")

复杂逻辑中的自定义异常:身高体重关系判断

假设成年人的身高与体重存在如下关系:身高(厘米)减去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("程序正常运行,没有捕捉到异常")

一元二次方程类的异常处理设计

设计一个用于求解一元二次方程的类,并为该类添加相应的异常处理机制,以应对判别式小于0导致无实根的情况,确保程序在数学逻辑错误时能给出明确反馈。

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("程序正常运行,没有捕捉到异常")

总结

至此,关于Python错误与异常处理的介绍结束。如需了解更多相关内容,建议搜索本站过往文章或继续浏览后续文章,感谢大家的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。