python - 希望我的代码引发特定类型或错误,但打印原始错误

标签 python python-3.x error-handling

假设我有一些代码会引发任何类型或错误。我希望我的代码引发 AssertionError,但打印出原始错误的原始消息。我该怎么做?

(例子)

原始错误: TypeError: '>' 在 'str' 和 'int' 的实例之间不被支持

自定义错误:AssertionError: exception = TypeError: '>' 不支持 'str' 和 'int' 的实例

最佳答案

您必须捕获引发的异常,然后引发您想要的任何类型。由于您提到要捕获任何 类型的错误,因此您必须使用Exception 类作为捕获。

但是,我要指出的是,这通常是一种不好的做法,因为您通常只想捕获预计会出现的特定错误。但是如果你最终还是抛出了一个错误,我想这并不可怕。但也让我特别想知道这段代码的目标是什么。无论如何..

捕获任何东西

try...except Exception as e

引发首选错误

引发 AssertionError()

获取消息

e.message

获取类型

类型(e)

综合起来:

try:
    # some code that raises an error
    g = 10 + '11'
except Exception as e:
    raise AssertionError('{}: {}'.format(type(e), e.message))

输出将是:

<type 'exceptions.TypeError'>: unsupported operand type(s) for +: 'int' and 'str'

这可以被清除以摆脱丑陋的 type(e) 输出,但通常这是您将错误类型及其相应消息包括在内的方式。

关于python - 希望我的代码引发特定类型或错误,但打印原始错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54974047/

相关文章:

python - 查找重复的文件名,并且只使用 python 保留最新文件

python - bash 和 $DISPLAY,如何?

python - 如何计算和替换列表列表中的值

python - 令人困惑的python-无法将字符串转换为float

bash - Shell脚本中的Echo错误消息

c++ - 您将如何将 Alexandrescu 的 Expected<T> 与 void 函数一起使用?

python - 如何使用 python 更改 couchdb 数据库的权限

python - 3.6 和 3.7 之间子类化的向后不兼容更改

python-3.x - 使用 Cloud Functions 将文件从 Google Cloud Storage 传输到 Windows VM 实例

python - 根据最后 3 个字符对文本进行排序