python - 可以在代码中使用异常作为条件吗?
问题描述
我正在使用 Sqlalchemy 和 Fastapi,并且在其中一个数据库模型中,我将唯一约束设置为 slug 列。所以每次有人试图设置已经存在的 slug 时,代码都会抛出一个 IntegrityError。我正在使用该 except 块来创建一个随机 slug 并递归调用该函数。以下是我的部分代码。
def create(self,
member_in: MemberCreateRequest, ) -> Member:
print("[+] CREATE Member")
try:
member_item = Member(
name=member_in.name,
email=member_in.email,
username=member_in.username,
slug=member_in.slug,
)
self.session.add(member_item)
self.session.commit()
self.session.refresh(member_item)
return member_item
except IntegrityError as e:
self.session.rollback()
# add some random number to slug and try adding it again
if "UNIQUE constraint failed: member.slug" in e.args[0]:
member_in.slug = "{slug}-{random_number}".format(
slug=member_in.slug, random_number=randint(100, 999)
)
return self.create(workspace_id, member_in)
else:
raise e
我想知道以这种方式使用 except 块是否可以。如果不能,您能否指出当前方法有什么问题以及我可以做些什么来使它变得更好?
谢谢你。
解决方案
可以在代码中使用异常作为条件吗?
您在问是否可以使用except
类似于块的else
块。
基本上,您正在处理代码。一般来说,软件工程有两种方法。
LBYL
if
: Look Before You Lead - 这意味着通过添加-else
检查来避免异常。EAFP
:比许可更容易请求宽恕 -try
一些东西,然后except
是异常并处理它。
你正在做的是EAFP。考虑一个except
等效于if
或else
块的块是完全可以的。
推荐阅读
- node.js - 如何让 node.js lambda 函数写入 postgresql 并返回错误/响应?
- python - 如果列匹配,则合并数据框
- c# - 用 BouncyCastle 加密文件,只有 C# 中的公钥?
- smalltalk - 不理解基本符号'|'
- javascript - 如何使用 Javascript 刷新上传的文本文件
- walmart-api - 来自 WalmartLabs API 的零星 504 网关超时错误
- r - 如何使用 data.table 根据条件计算列总和?
- php - 如何获取用户的 IP,然后在缓存的 amp 表单上定位?
- jquery - Fullcalendar 资源未在版本 4 中显示
- python - 将 VBA 转换为 Python - 文件结构问题