2014-07-14 56 views
5

我是一个Java开发人员,他是Python的新手,我正在将Java类重写为Python类。我试图尽可能地模仿Python类中原始类的流。 Java类有几行,Python是否具有抛出新Exception的Java等价物(“text here”)

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

我一直在寻找在Python documentation for exceptions而一直没能找到一个Python等同于Java语法。

我通过阅读这篇StackOverflow post试过的东西(我认为是接近)与raise Exception("text here"),但它好像这是一个tryexcept块内使用,将导致从try块到except块的跳跃;我试图避免tryexcept块,只是抛出一个异常。

一个解决方案,我认为可能的工作是这样的,

try: 
     if(condition): 
      raise Exception("text here") 
    except: 
     ... 

但我想知道是否有一种方法更密切相关的Java方法,这样我可以保持尽可能多的流尽可能(有他们看起来相似)。

+0

'raise'就像'throw'; 'try'就像'try'。你不需要*添加'try'块来在Python中使用异常。 – Ryan

+0

Java异常完全相同:它们要么跳到最近的合适的catch块,要么产生堆栈跟踪:)尝试说'except:pass',看看会发生什么。 – Ashalynd

+1

请注意,您可能会派生自己的异常:https://docs.python.org/2/tutorial/errors.html#user-defined-exceptions –

回答

2

忘了尝试,你的代码是完全等同的,没有它

正如其他人指出了这一点:这将引发(而没有捕获或处理异常):

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

但是,如果你想要像处理java方法一样处理它,那么:

正如this documentation中所解释的那样,你将会通过一个方法抛出它们,然后你只需要d o是尝试方法而不是方法中的每一个条件。

#!/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() 
+0

这是非常明确和简洁的,这就是为什么我接受它作为答案。一个简单的问题不是什么大问题,当我使用你的代码时,我的打印输出在文本Exception('Something Happened')之后有一个奇怪的逗号,你知道为什么吗? (同样,这个答案正是我所需要的!) –

+1

@ 2g7hgfdr8324,如果你测试它[这里](http://www.compileonline.com/execute_python_online.php),它就一定是你环境中的东西,你不会看到您在机器中出于某种原因而看到的逗号。 – Mansueli

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

会完成你想要的。试一试。

+0

我试过这个,但文本没有显示。有任何想法吗? –

+0

它在我的情况下做了 - 看看堆栈跟踪的结尾。如果您不想要堆栈跟踪,则必须捕获它或定义一个打印没有跟踪的错误消息的异常。 –

1

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

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

如果你想捕获异常,然后使用Python的尝试/除非是要走的路。

5

异常处理可能是Python的一个非平凡的方面,它在语法和语义上与Java的差异最小。这真的只是raise Exception("text here")。不,它不必在字面上以try块为单位。和Java一样,它传播调用堆栈,直到遇到try块(匹配except子句),或者如果没有这样的块,它终止程序并输出错误消息。

1
raise StandardError("message") 

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

+3

“标准错误”在Python 3中不存在,在Python 2中非常隐晦,并且作为大多数异常的超类(以允许捕获“错误”而不捕获“控制流异常”)而不是实例化。 “Exception”与Java更接近。 – delnan

相关问题