python基础:异常、 try_except、多层try_except、finally、with、traceback模块、自定义异常

本文介绍了Python中的异常处理机制,包括try-except、多层try-except、finally和with语句的使用,以及如何利用traceback模块记录异常信息。同时,通过自定义异常类展示了如何创建和抛出自定义异常。这些技巧对于编写健壮的代码和进行有效调试至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.常见异常总结

2.try_except_代码示例

while True:
    try:  # 是最常见的异常处理结构。没有这个结构出现异常直接飘红字并结束运行
        a = int(input("请输入一个数字:"))  # 输入一个abcd
        a /= 0
        print("输入了的数是:", a)  # 跳过不执行
        if a == 88:
            print("退出程序")
            break  # 退出循环命令
    except BaseException as e:
        print(e)  # 输出:invalid literal for int() with base 10: 'g'
        print("异常是,输入的不是一个数字")
        break

print("循环输入数字程序结束")  #打印完异常后照样执行

3.多层try_except

try:  # 细分异常输出能更好调试错误

    a = input("请输入一个被除数:")
    b = input("请输入一个除数:")
    c = float(a)/float(b)
except ZeroDivisionError as e:
    print("异常信息:不能除以0", e)
except ValueError as e:
    print("异常信息:不能将字符串转成数字",e)
except NameError as e:
    print("异常信息:变量不存在",e)
except BaseException as e:
    print(("异常信息:",e))
else:
    print("除的结果", c)
print("程序结束")

4.finally_代码示例

try:  # finally 中保证关闭文件资源
    f = open("D:/odd.txt","r")
    content = f.readline()
    print(content)
except:
    print("文件未找到")
finally:
    print("run in finally,关闭资源")
    try:
        f.close()#释放资源。此处也可能会发生异常。若发生异常,则程序终止,不会继续往下执行
    except BaseException as e:
        print(e)

5.with_代码示例

with open("d:/odd.txt", "r") as f:  # with 上下文管理可以自动管理资源
    content = f.readline()
    print(content)
print("程序结束了")

6.traceback模块_代码示例

import traceback  # 使用 traceback 将异常信息写入日志文件

try:
    print("step1")
    a = 1/0
except:
    with open("d:/odd.txt", "a") as f:
        traceback.print_exc(file=f)  # 异常信息打印到"d:/odd.txt"

7.自定义异常_代码示例

class AgeError(Exception):  # 继承 Exception. 测试自定义异常类
    def __init__(self, error_info):
        Exception.__init__(self)  # ??
        self.error_info = error_info
    def __str__(self):
        return str(self.error_info)+", 年龄错误! 应该是1-200之间"

if __name__ == "__main__":  #如 果为 True,则模块是作为独立文件运行,可以执行测试代码
    age = int(input("输入一个年龄:"))
    if age<1 or age>200:
        raise AgeError(age)  # ??
    else:
        print("正常的年龄", age)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值