Python是否有Java等价于抛出新的异常

Does Python have a Java equivalent of throw new Exception(“text here”)

我是一个Java开发人员,对Python是新手,我正在把一个Java类改写为Python类。我正在尽可能地模拟Python类中原始类的流。Java类有几行,

1
2
    if(condition)
       throw new Exception("text here")

我一直在查看Python文档中的异常情况,但找不到与Java语法等价的Python。

我通过阅读这个stackoverflow post尝试过(我认为很接近)使用raise Exception("text here"),但这似乎是在tryexcept块中使用,并将导致从try块跳转到except块;我试图避免tryexcept块,并抛出一个异常。

我认为一个可行的解决办法是,

1
2
3
4
5
    try:
        if(condition):
           raise Exception("text here")
    except:
        ...

但我想知道是否有一种与Java方法更紧密相关的方法,以便我可以尽可能多地维护流程(让它们看起来很相似)。


异常处理可能是Python的一个非平凡方面,它在语法和语义上与Java不同。这真的只是raise Exception("text here")。不,它不必在一个try块中使用。在Java中,它传播调用堆栈,直到它最终遇到EDCOX1×1×块(具有匹配的EDCOX1×3)子句,或者如果没有这样的块,它终止程序并打印错误消息。


忘记尝试,如果没有它,您的代码将完全等效。

正如其他人指出的:这个抛出(不捕获或处理异常):

1
2
3
condition ="Foo"
if(condition is"Foo"):
      raise Exception("FooException")

但是,如果您想处理它,如果您抛入Java方法,那么:

如本文所述,您将通过一个方法抛出它们,然后您所要做的就是尝试该方法,而不是方法中的每个条件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/local/bin/python2.7

def foo(num):
    if (num == 2):
       raise Exception("2Exception")
    if (num == 3):
       raise Exception("Numception")

def handleError(e):
    print(e)

def main():
  try:
    foo(3)
    print("no errors")
  except Exception, e:
    handleError(e)


if __name__ =="__main__":
    main()


1
raise StandardError("message")

在任何地方都是完全有效的代码。实际上,在try/except块中引发异常通常只是为了显示案例错误处理。在同一个函数中引发和处理异常实际上没有意义。


如果您不想捕获异常,那么这可能是您想要的:

1
2
if condition:
    raise Exception("something bad happened!")

如果您确实想捕获异常,那么可以使用Python的try/except。


1
2
if (condition):    
    raise Exception("test")

会实现你想要的。试一试。