我正在尝试为Python创建一个库,我想添加自定义异常,但是每次我
raise
出现异常时,异常都会显示我的raise
是问题所在。
例如:
Traceback (most recent call last):
File "c:\Users\james\Desktop\mylibrary\testing.py", line 16, in <module>
'the library user doing absolute shit'
File "c:\Users\james\Desktop\mylibrary\mylibrary\__init__.py", line 100, in function_name
else: raise errors.myerror('Text about my custom error')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
errors.myerror: Text about my custom error
我设法使用
sys.excepthook
解决了这个问题,并且没有使用 VSCode 调试器 (Run Without Debugging
):
Traceback (most recent call last):
File "c:\Users\james\Desktop\mylibrary\testing.py", line 16, in <module>
'the library user doing absolute shit'
errors.myerror: Text about my custom error
但是当我使用 VSCode 调试工具(
Start Debugging
)时,它又说问题来自我的raise
。
问题似乎是因为您没有正确处理自定义异常。您尚未提供引发错误的代码,但自定义异常需要以下内容:
try
语句中。代码本身可以在函数中,但是当代码运行时,它必须发生在 try
块内。except
语句来处理错误。这是任何 try
块所必需的,如果您没有正确处理错误,那么自定义异常就没有意义。这是自定义异常的示例(此处是有关自定义异常的指南/示例)。
class errors:
class cost_error(Exception):
def __init__(self, message):
super().__init__(message)
self.message = message
money, cost_of_item = 5, 100 #variables for example
try:
if cost_of_item > money:
raise errors.cost_error("This item is too expensive!")
else:
print("Item purchased!")
except errors.cost_error as error:
print(f"Error: {error}")
quit() #This built-in function will terminate the program
print("Hey, if the item is too expensive then this won't print")
如您所见,错误引发发生在
try
except
块内部。这是因为当引发错误时,如果它不在 try
块内,它将返回您的 raise 语句作为错误。如果您不将其放入 try
块中,它将不会被处理并导致您的程序停止。
不使用
try
块时引发的错误示例:
Traceback (most recent call last):
File "/Users/person/test.py", line 20, in <module>
raise errors.cost_error("This item is too expensive!")
__main__.cost_error: This item is too expensive!
但是,如果您只是将其放入
try
块中但不处理它,那么它将忽略该错误,因为这就是 try
except
块的行为方式。因此,您需要在 errors.myerror
块中将 try
作为异常处理。