gpt4 book ai didi

python - 定义镜像内置异常格式的自定义 Python 异常

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:19 24 4
gpt4 key购买 nike

首先,以下是解决此问题的类似问题:
1.Raising exceptions without 'raise' in the traceback?
2.Don't show Python raise-line in the exception stack

不,它不是重复的,因为答案并没有真正解决问题。

我不想格式化实际的traceback对象。相反,我只想格式化它向用户显示的方式。

代码

来源.py

class HelloError(Exception):
pass

def type_hello_here(string):
if string != 'hello':
raise HelloError("You must type 'hello', not '{}'".format(string))

脚本.py

from source import type_hello_here
type_hello_here('hello') # No error here
type_hello_here('booty') # Obviously returns an error because booty != hello

糟糕的异常

Traceback (most recent call last):
File "D:/python/script.py", line 3, in <module>
type_hello_here('booty')
File "D:\python\source.py", line 6, in type_hello_here
raise HelloError("You must type 'hello', not '{}'".format(string))
source.HelloError: You must type 'hello', not 'booty'

期望的异常

Traceback (most recent call last):
File "D:/python/script.py", line 3, in <module>
type_hello_here('booty')
HelloError: You must type 'hello', not 'booty'

我想对其进行格式化,以便不显示指向源模块中代码的最后一个条目,因为错误实际上并未发生在那里。另外,我希望 'source.HelloError' 中的源消失。

最佳答案

正如评论中提到的,这样做确实没有任何优势,通常当您引发异常时,您希望向其他开发人员提供完整堆栈跟踪帮助排除故障并更好地理解失败的原因和方式。

但是,对于您想要做的事情,类似的事情可能会起作用,但是您可能需要重新考虑这样做。利用 traceback,您可以捕获引发的异常,然后使用 print_exc 将回溯限制设置为 1:

import traceback

class HelloError(Exception):
pass

def type_hello_here(string):
if string != 'hello':
raise HelloError("You must type 'hello', not '{}'".format(string))

try:
type_hello_here('booty') # Obviously returns an error because booty != hello
except HelloError as exc:
traceback.print_exc(limit=1)

将给出输出:

Traceback (most recent call last):
File "stuff.py", line 62, in <module>
type_hello_here('booty') # Obviously returns an error because booty != hello
HelloError: You must type 'hello', not 'booty'

关于python - 定义镜像内置异常格式的自定义 Python 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36191566/

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