Python有没有类似于Java的throw new Exception("text here")?

5 投票
5 回答
2534 浏览
提问于 2025-04-18 19:00

我是一名刚接触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 个回答

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

这段代码会实现你想要的效果。试试看吧。

1
raise StandardError("message")

这段代码在任何地方都是完全有效的。实际上,在一个尝试/捕获的代码块中抛出异常,通常只是为了展示如何处理错误。其实在同一个函数里抛出并处理异常并没有太大意义。

1

如果你不想处理这个错误,那你可能想要这样做:

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

如果你想处理这个错误,那就可以使用Python的try/except来实现。

5

异常处理可能是Python中与Java最不相同的一个方面,无论是在语法还是在意义上。其实就是用 raise Exception("这里是错误信息") 来抛出一个异常。并且,它不一定要放在 try 块里面。就像在Java中一样,异常会沿着调用的路径向上冒泡,直到遇到一个 try 块(并且有对应的 except 处理),如果没有找到这样的块,程序就会终止并打印出错误信息。

2

忘了那个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()

撰写回答