gpt4 book ai didi

python - 在 Python 中,是否有对异常引发者的引用?

转载 作者:行者123 更新时间:2023-11-28 22:29:20 25 4
gpt4 key购买 nike

我正在编写一个名为 Rule 的类的方法 check,它可以抛出一个 RuleEnforced 异常,其错误消息包括一个字符串提出它的 Rule 的表示。下面是它现在的实现方式:

class RuleEnforced(Exception):
def __init__(self, rule, reason):
message = "The rule {rule} failed for the following reason: {reason}".format(rule=rule, reason=reason)
super(RuleEnforced, self).__init__(message)

class Rule(object):
def check(self):
raise RuleEnforced(rule=self, reason="Why not?")

rule=self 参数始终相同,但是,我正在寻找一种方法,通过在异常中使用类似“self .caller.__class__”(伪代码)。有什么办法可以实现吗?

最佳答案

没有更简单的方法来访问引发异常的实例。

引发的异常包括回溯,即导致异常站点的调用堆栈。您可以从该堆栈中提取 self(保留堆栈的局部变量和全局变量),但这远不如传入 rule=self 那样可读、简单和清晰>。查看inspect module overview of internal objects查看 tracebackframe 对象支持什么。

如果你想在构造异常时访问调用者(所以引发异常之前),你必须检查当前调用堆栈并从中提取self调用者,召集者。同样,这不直观或不可读,并且取决于 Python 解释器的实现细节。显式传递规则更清晰、更易读。如果您确实想走这条路,请参阅 sys._getframe() methodinspect module support for stack inspection .

换句话说,来自 Zen of Python : 显式优于隐式

关于python - 在 Python 中,是否有对异常引发者的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43094141/

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