Python有没有类似于Java的throw new Exception("text here")?
我是一名刚接触Python的Java开发者,现在正在把一个Java类重写成Python类。我尽量在Python类中模仿原来Java类的流程。这个Java类里有几行代码是这样的:
if(condition)
throw new Exception("text here")
我查看了Python文档中的异常处理,但没能找到和Java语法相对应的Python写法。
我尝试用raise Exception("这里是文本")
,这是我从StackOverflow的一个帖子上了解到的,但这似乎是要在try
except
块里面使用的,会导致从try
块跳到except
块;而我想避免使用try
except
块,直接抛出异常。
我觉得一个可能有效的解决方案是这样的:
try:
if(condition):
raise Exception("text here")
except:
...
但我想知道有没有一种方法更接近Java的写法,这样我可以尽量保持流程的一致性(让它们看起来相似)。
5 个回答
if (condition):
raise Exception("test")
这段代码会实现你想要的效果。试试看吧。
raise StandardError("message")
这段代码在任何地方都是完全有效的。实际上,在一个尝试/捕获的代码块中抛出异常,通常只是为了展示如何处理错误。其实在同一个函数里抛出并处理异常并没有太大意义。
如果你不想处理这个错误,那你可能想要这样做:
if condition:
raise Exception("something bad happened!")
如果你想处理这个错误,那就可以使用Python的try/except来实现。
异常处理可能是Python中与Java最不相同的一个方面,无论是在语法还是在意义上。其实就是用 raise Exception("这里是错误信息")
来抛出一个异常。并且,它不一定要放在 try
块里面。就像在Java中一样,异常会沿着调用的路径向上冒泡,直到遇到一个 try
块(并且有对应的 except
处理),如果没有找到这样的块,程序就会终止并打印出错误信息。
忘了那个try吧,你的代码没有它也完全一样。
正如其他人提到的:这段代码会抛出异常(但不会捕获或处理这个异常):
condition = "Foo"
if(condition is "Foo"):
raise Exception("FooException")
不过,如果你想像在Java方法中那样处理异常的话,
正如在这个文档中解释的那样,你可以通过一个方法来抛出异常,然后你只需要尝试调用这个方法,而不是在方法中检查每一个条件。
#!/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()