gpt4 book ai didi

java - python : Java throws equivalent in python

转载 作者:太空狗 更新时间:2023-10-29 17:57:22 25 4
gpt4 key购买 nike

不是试图比较语言,只是为了知识,

有什么方法可以在 Python 中实现与 java throws 关键字/功能等效的方法吗?

或者我们可以在静态时间识别任何方法抛出的已检查异常的方式?

或传递(链接)异常处理责任?

Java:

public void someMethod() throws SomeException
{

}

python :

@someDecorator  # any way to do?
def someMethod():
pass

最佳答案

如果你不能有静态类型的参数,你就不能有静态抛出声明。例如,我无法注释此函数:

def throw_me(x):
raise x

甚至这个:

def call_func(f):
f() # f could throw any exception

您可以做的是将抛出指定异常以外的任何类型的异常都设为错误:

from functools import wraps

class InvalidRaiseException(Exception):
pass

def only_throws(E):
def decorator(f):
@wraps(f)
def wrapped(*args, **kwargs):
try:
return f(*args, **kwargs)
except E:
raise
except InvalidRaiseException:
raise
except Exception as e:
raise InvalidRaiseException("got %s, expected %s, from %s" % (
e.__class__.__name__, E.__name__, f.__name__)
)

return wrapped
return decorator
@only_throws(ValueError)
def func(x):
if x == 1:
raise ValueError
elif x == 2:
raise Exception
>>> func(0)
>>> func(1)
ValueError
>>> func(2)
InvalidRaiseException: got Exception, expected ValueError, from func

关于java - python : Java throws equivalent in python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18289352/

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