Python异常处理实战:从基础输入校验到自定义异常类设计
本文通过六个具体编程案例,系统讲解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错误与异常处理的介绍结束。如需了解更多相关内容,建议搜索本站过往文章或继续浏览后续文章,感谢大家的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









