gpt4 book ai didi

python - 在 python 方法中处理异常的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 22:15:58 24 4
gpt4 key购买 nike

假设我有一个函数,并且根据其输入,它必须“建议”调用者函数出现了问题:

def get_task(msg, chat):
task_id = int(msg)
query = db.SESSION.query(Task).filter_by(id=task_id, chat=chat)
try:
task = query.one()
except sqlalchemy.orm.exc.NoResultFound:
return "_404_ error"
return task

请注意,在 except block 中,我想传递调用者函数可以处理的内容,并在必要时停止其执行,否则,它将返回正确的对象。

def something_with_the_task(msg, chat):
task = get_task(msg, chat)
if task == "_404_ error":
return
#do some stuff with task

最佳答案

您似乎已经知道异常是如何工作的。

发生错误时最好的做法是引发异常。

返回一些神奇值被认为是一种不好的做法,因为它需要调用者显式检查它,并且 hundred of other reasons .

您可以简单地让 sqlalchemy.orm.exc.NoResultFound 异常转义(通过删除 try: except: block get_task()),并让调用者使用 try: ... except: ... block 来处理它,或者,如果您愿意做一些 hiding ,您可以定义自定义异常:

class YourException(Exception):
pass

并像这样使用它:

def get_task(msg, chat):
try:
task = ...
except sqlalchemy.orm.exc.NoResultFound:
raise YourException('explanation')
return task

def something_with_the_task(msg, chat):
try:
task = get_task(msg, chat)
# do some stuff with task
except YourException as e:
# do something with e
# e.args[0] will contain 'explanation'

如果需要,可以通过显式添加一些属性和构造函数来设置这些属性,从而使 YourException 类提供更多信息。

但是默认构造函数做得不错:

>>> e = YourException('Program made a boo boo', 42, 'FATAL')
>>> e
YourException('Program made a boo boo', 42, 'FATAL')
>>> e.args[0]
'Program made a boo boo'
>>> e.args[1]
42
>>> e.args[2]
'FATAL'

关于python - 在 python 方法中处理异常的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50103460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com