page contents

Python异常处理:错误处理最佳实践!

写代码的时候,bug就跟空气一样无处不在。作为一个Python程序员,掌握异常处理简直是基本功中的基本功。今天我就跟大家聊聊Python异常处理那些事儿,看看怎么把代码写得更健壮、更优雅。

attachments-2024-12-XNH0RpiY67661aded3116.png写代码的时候,bug就跟空气一样无处不在。作为一个Python程序员,掌握异常处理简直是基本功中的基本功。今天我就跟大家聊聊Python异常处理那些事儿,看看怎么把代码写得更健壮、更优雅。

try-except的正确姿势

要说异常处理,就得从最基础的try-except说起。你可能经常看到这样的代码:

try:

number = int(input("输入一个数字: "))

result = 100 / number

print(f"100除以{number}等于{result}")

except:

print("出错了!")

这代码看着没啥问题,但其实问题大了去了!这么写就跟用大锤子砸核桃一样,啥异常都给砸一块了。咱得分门别类地处理才行:

try:

number = int(input("输入一个数字: "))

result = 100 / number

print(f"100除以{number}等于{result}")

except ValueError:

print("哎呀,这不是个数字啊")

except ZeroDivisionError:

print("除数不能是0哦")

温馨提示:永远不要光秃秃地写个except,这样会把所有异常都捕获了,包括你按Ctrl+C想终止程序的KeyboardInterrupt。这就好比你上课睡觉,啥声音都听不见,老师叫你都没用。

使用else和finally

try-except还有两个好兄弟:else和finally。它们仨经常一块儿出现:

def read_data():

file = None

try:

file = open('data.txt')

content = file.read()

except FileNotFoundError:

print("找不到文件咋办?创建一个呗")

content = ""

else:

print("文件读取成功啦") # 只有try块正常执行才会到这

finally:

if file:

file.close() # 无论如何都要关闭文件

return content

else就像是”如果一切正常”的意思,finally就是”无论如何都要做”的意思。在处理文件、数据库连接这些需要清理的资源时,finally简直是神器。

自定义异常

Python内置的异常已经够多了,但有时候还是不够用。这时候就得自己动手,丰衣足食:

class MoneyNotEnoughError(Exception):

def __init__(self, balance, amount):

self.balance = balance

self.amount = amount

def __str__(self):

return f"想花{self.amount}块钱,但钱包里只有{self.balance}块"

def buy_something(price, wallet):

if wallet.balance < price:

raise MoneyNotEnoughError(wallet.balance, price)

自定义异常要继承自 Exception 类,这样它就能保持异常该有的特性。

异常链

有时候你想保留原始异常,但又想抛出新的异常,这时候就用到异常链了:

def process_data(data):

try:

return json.loads(data)

except json.JSONDecodeError as e:

raise ValueError("数据格式不对") from e

用 from 关键字可以把两个异常串一块,调试的时候特别有用。

温馨提示:记住异常处理不是用来掩盖错误的,而是用来优雅地处理错误的。该报错的时候就让它报,不然就像把垃圾扫到地毯下面,迟早要出问题。

with语句:上下文管理

说到异常处理,就不能不提 with 语句。它能自动处理资源的清理工作:

# 不用写finally了,多香

with open('data.txt') as f:

content = f.read()

process_data(content)

这代码写得多简洁,文件打开关闭的事儿压根不用操心。

写代码难免会遇到各种异常情况,关键是看你怎么处理。把异常处理写好了,代码健壮性立马就上去了。代码出了问题,该提示的提示,该记录的记录,这才是专业的做法。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2024-12-21 09:33
  • 阅读 ( 47 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1658 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1658 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章