欢迎光临
我们一直在努力

AI智能体筑基:Python的PEP8规范与异常处理全攻略(内附快捷键分享)

Day01 AI智能体筑基打卡

当 Python 首次登顶 TIOBE 榜首、取代霸榜多年的 Java,AI 时代的编程版图已然改写。语法易学只是入场券,真正的分水岭在于智能体应用开发中的落地能力。无论你是在校园里学着与现实脱节的旧知识,还是身处传统前后端领域面临被替代的焦虑——这个系列不绕弯子、不讲废话,只聚焦那些真正会卡住你的痛点,记录一步步踩坑与补全认知的过程。

AI 浪潮下,我们都是摸着石头过河的同行者。与其被焦虑裹挟,不如把学习日常摊开来,一起查缺补漏、扎实成长。希望这些记录能陪你在这场技术变革中,走得更稳、更远。

一、今日学习内容

规范

PEP8编码规范

  • 缩进规范:

    统一使用4 个空格缩进,禁止 Tab 与空格混用(一直爆红找不到原因,可以全局格式化)

    函数、循环、判断内部代码强制缩进。

  • 命名规范:

    • 变量、函数:蛇形命名法 user_name / get_data(),全小写 + 下划线分割
    • 类:大驼峰 UserInfoRecord,每个单词首字母大写
    • 常量:全大写 MAX_RETRY_TIMES = 10
  • 注释书写规范:

    • 行内注释:代码后方空两格再写#,用于简短说明单行逻辑

    • 块注释:单独一行#开头,描述下方整块代码功能

    • 函数 / 类文档注释:三引号"“” “”",说明入参、返回值、功能

基础(异常)

异常就是程序运行过程中出现的错误,它会中断程序的正常执行流程,保证数据和逻辑的正确性。

异常有捕获异常和主动抛出异常之分。

异常捕获(try…except…else…finally):(为了程序不崩,接住错误)

  • try-except-else-finally 异常捕获基础结构:

    try
    可能出现异常的业务代码1
    可能出现异常的业务代码2
    ...
    except [异常类型 as 变量名]: # 把异常报错装进变量,便于查看具体原因
    出现异常时的预案
    ...
    else: # 没有发生任何异常时才执行
    ...
    finally: # 无论如何都会执行,释放资源
    ...

    注:try…finally 是一种异常处理结构,其中的 finally 子句用于定义 无论是否发生异常,都会被执行 的清理/资源释放代码(不常用)。

    注: 把**“没有异常时才该做的事”**放进 else,可以让 try 块里只放“高危代码”,逻辑更干净。

  • 区分不同报错:

    Exception:兜底异常,是常见异常的父类,可以承接所有异常情况。

    异常名字中文直译碰到就想起一句话
    IndexError 下标越界 “列表就那么长,你指太远了”
    KeyError 键不存在 “字典里没这个标签”
    ValueError 值错误 “内容是垃圾,转不了数字”
    TypeError 类型错误 “字符串和数字别瞎拼凑”
    NameError 名字未定义 “变量名拼错了或没赋值”
    AttributeError 属性不存在 “对象身上没这件衣服(属性)”
    ZeroDivisionError 除以零 “别跟数学规则对着干”
  • 异常传递就是异常在函数调用中层层上报的过程,直到有人处理它,或者程序崩溃。

    主动抛出异常(raise):(为了更好的实现业务逻辑,回报上层代码处理)

    有时候,Python 自己不会报错,但业务逻辑不允许。这时候你需要主动 raise(抛出)异常。

    raise 异常类型("错误描述信息")

    这时候,一些逻辑问题就可以通过异常抛出来解决,而不是单纯的print一句,“借阅失败,图书数量已达上限!”

    这样做的好处是:raise 可以通过 try…except 被精准捕获,让上层代码判断执行失败,从而决定下一步操作,提高了代码的健壮性。

    自定义业务异常(最优雅):(俺们这群敲代码的不就图个优雅嘛!)

    Python 内置的异常(如 ValueError、TypeError)太泛了,无法精准表达业务错误。这时候我们可以自定义异常类。

    # 自定义异常:只需继承 Exception(或其子类)
    class BorrowLimitError(Exception):
    """借阅数量超限异常"""
    pass

    class BookStockError(Exception):
    """书籍库存不足异常"""
    pass

    class BookNotFoundError(Exception):
    """书籍不存在异常"""
    pass

    最后用一个完整的图书借阅系统总结三种异常:

    # ——- 1. 定义自定义异常 ——-
    class BorrowLimitError(Exception):
    pass

    class BookStockError(Exception):
    pass

    # ——- 2. 在业务逻辑中主动抛出 ——-
    class Member:
    def borrow_book(self, book: Book):
    if len(self.__borrowed_books) >= self.get_max_books():
    # 主动抛出异常(raise)
    raise BorrowLimitError(f"已达上限 {self.get_max_books()} 本")
    if book.get_available_num() <= 0:
    raise BookStockError(f"《{book.title}》库存不足")

    # 正常借阅
    book.decrease_stock()
    self.__borrowed_books.append(book)
    print(f"借阅《{book.title}》成功")

    # ——- 3. 在调用层细分捕获 ——-
    class LibrarySystem:
    def handle_borrow_book(self):
    book_id = input("请输入图书编号:")
    book = self.books.get(book_id)
    if not book:
    print("图书编号不存在")
    return

    try:
    # 尝试借书(内部可能抛出自定义异常)
    self.current_member.borrow_book(book)
    except BorrowLimitError as e: # 异常捕获,但是自定义异常
    print(f"{e},无法继续借阅")
    except BookStockError as e:
    print(f"{e},请选择其他书籍")
    except Exception as e:
    # 兜底捕获所有未知错误
    print(f"系统异常:{e}")
    else:
    # 借书成功,没有异常
    print("🎉 借书流程完成")
    finally:
    print("— 本次操作结束 —")

    快捷键

    • ctrl + alt +L = 格式化

    • ctrl + D = 快速复制一行

    • ctrl + / = 注释

    • shift + 回车 = 光标换行

    • ctrl + alt + V = 快速使用变量接收

    • ctrl + alt + M = 选中代码,把代码抽取到函数中

    • ctrl + alt + T = 选中代码,把代码抽取到一个代码块中

    • ctrl + alt +左右键 = 上下代码切换位置

    • ctrl + F = 搜索

    • ctrl + R = 替换

    • ctrl + . = 切换中英文输入法

    二、今日核心代码

    # Day01 PEP8规范 + 多场景异常捕获5组案例
    # 案例1: 列表索引越界
    def get_list_item(data_list,index):
    # try块,存放可能会出错的代码
    try:
    res = data_list[index]
    return res
    except IndexError as e:
    print(f"索引越界异常:{e}")
    finally:
    print("列表查询流程执行完毕!")

    # 案例2: 字典键不存在
    def get_dict_key(data_dict,key):
    # 存放可能出错的代码
    try:
    res = data_dict[key]
    return res
    except KeyError as e:
    print(f"key不存在:{e}")
    finally:
    print("key查询流程执行完毕!")

    # 案例3: 除数为0
    def get_avg(data_list):
    try:
    avg_num = sum(data_list) / len(data_list)
    return avg_num
    except ZeroDivisionError as e:
    print(f"求值运算异常:{e}")
    except Exception as e: # 兜底异常
    print(f"未知运算异常:{e}")
    finally:
    print("平均值计算流程执行完毕!")

    # 案例4: 文件读取
    def read_file(file_path):
    try:
    with open(file_path,"r",encoding="utf-8") as f: # 把open()返回的东西赋值给f
    return f.read()
    except FileNotFoundError as e:
    print(f"文件不存在:{e}")

    # 案例5: 类型转换异常
    def str_to_int(text):
    try:
    return int(text)
    except ValueError as e:
    print(f"数值转换失败:{e}")

    # 调用测试
    if __name__ == '__main__':
    lst = [10,20,30]
    get_list_item(lst,99) # 触发IndexError

    info = {"name":"小明"}
    get_dict_key(info,"age") # 触发KeyError

    三、每日三件事

  • 今日代码实操完成情况:

    完成 5 组不同业务场景异常捕获案例,覆盖列表索引、字典键读取、除法运算、文件读取、字符串转数字。

  • 今日踩坑Bug+原因+解决方案:

    今天还真就没报错,真是美好的一天~

  • GitHub当日代码仓库地址:Day01 异常Demo

  • 四、今日优质代码习惯

    精准捕获细分异常

    首先有一种低效的写法,只使用except返回报错,不便于排查错误,于是:

    lst = [1,2,3]
    try:
    print(lst[10])
    except:
    print("出错了")

    一种更好的写法诞生了:

    lst = [1,2,3]
    try:
    print(lst[10])
    except IndexError as err:
    print(f"列表索引越界,错误详情:{err}")


    技术的路,没有捷径。这篇文字是一个起点。阅读量高低不重要,每一次记录,都是在为未来的自己铺路。路虽远,行则将至。继续写,别停。共勉。

    赞(0)
    未经允许不得转载:171主机测评 » AI智能体筑基:Python的PEP8规范与异常处理全攻略(内附快捷键分享)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址