gpt4 book ai didi

python - 异常必须派生自 BaseException

转载 作者:行者123 更新时间:2023-12-05 02:52:42 24 4
gpt4 key购买 nike

我在这里错过了什么?

import sys

class MyBaseError(BaseException):
def __init__(self, message, base_message=None, *args):

self.message = message
self.base_message = base_message
super(MyBaseError, self).__init__()


def __str__(self):
if self.base_message is None:
return self.message

return self.message + " '" + str(self.base_message) + "'"


class MyError(MyBaseError):
"""
"""

class MyTypeError(MyError):
"""
"""

def run_me():
raise MyTypeError("run_me")


def sayonara():
try:
run_me()
except (MyBaseError) as e:
raise(MyBaseError("unable to run",
e,
e.args),
sys.exc_info()[2])

sayonara()

错误:

Traceback (most recent call last):
File "main.py", line 32, in sayonara
run_me()
File "main.py", line 27, in run_me
raise MyTypeError("run_me")
__main__.MyTypeError: run_me

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "main.py", line 42, in <module>
sayonara()
File "main.py", line 40, in sayonara
sys.exc_info()[2])
TypeError: exceptions must derive from BaseException

MyBaseError 类已经派生自 BaseException。

最佳答案

在您的 sayon​​ara() 函数中,您似乎正试图引发异常元组。问题是 sys.exc_info()[2] 是回溯,而不是异常,这是您中断的原因。我通过将以下行放在异常 block 的顶部来验证这一点:

print(type(sys.exc_info()[2]))

我不确定您要做什么,但是 sayon​​ara() 的工作版本如下:

def sayonara():
try:
run_me()
except (MyBaseError) as e:
raise MyBaseError("unable to run", e, e.args)

如果你想包含回溯,你需要更新你的自定义错误类来处理传递的参数。

关于python - 异常必须派生自 BaseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62520780/

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