Python是否有Java等效的抛出新异常(“text here”)
我是一名Java开发人员,对Python不熟悉,我正在将Java类重写为Python类。我试图在Python类中尽可能模仿原始类的流程。Java类有几行代码Python是否有Java等效的抛出新异常(“text here”),python,exception,Python,Exception,我是一名Java开发人员,对Python不熟悉,我正在将Java类重写为Python类。我试图在Python类中尽可能模仿原始类的流程。Java类有几行代码 if(condition) throw new Exception("text here") 我一直在查看,没有找到与Java语法等效的Python 通过阅读此内容,我尝试了一些(我认为很接近)带有raiseexception(“text here”)的内容,但似乎这是在tryexcept块中使用的,并且会导致从tr
if(condition)
throw new Exception("text here")
我一直在查看,没有找到与Java语法等效的Python
通过阅读此内容,我尝试了一些(我认为很接近)带有raiseexception(“text here”)
的内容,但似乎这是在try
except
块中使用的,并且会导致从try
块跳到except
块;我试图避开try
块,只抛出一个异常
我认为可行的解决办法是
try:
if(condition):
raise Exception("text here")
except:
...
但我想知道是否有一种方法与Java方法更密切相关,这样我就可以尽可能多地维护流(让它们看起来相似)
你会完成你想要的。试试看。如果您不想捕获异常,那么这可能就是您想要的:
if condition:
raise Exception("something bad happened!")
如果您确实想捕获异常,那么使用Python的try/except是一种方法。异常处理可能是Python在语法和语义上与Java最不相同的一个方面。它实际上只是引发异常(“此处的文本”)
。不,它不必在try
块中。与Java中一样,它向上传播调用堆栈,直到最后遇到try
块(带有匹配的except
子句),或者如果没有这样的块,它终止程序并打印错误消息
raise StandardError("message")
在任何地方都是完全有效的代码。事实上,在try/except块中引发异常通常只是为了显示案例错误处理。实际上,在同一个函数中引发和处理异常是没有意义的。忘记尝试,没有它,您的代码将完全相同
正如其他人指出的:这会抛出(并且不会捕获或处理异常):
但是,如果您想像抛出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()
我尝试了这个,但是文本没有显示。有什么想法吗?在我的例子中是这样的-看看堆栈跟踪的末尾。如果不希望堆栈跟踪,则必须捕获它或定义一个异常,该异常打印错误消息而不包含跟踪。raise
类似于throw
try
就像try
。在Python中使用异常不必添加try
块。Java异常的作用完全相同:它们跳转到最近合适的catch块或生成堆栈跟踪:)尝试说except:pass
,看看会发生什么。请注意,您可以派生自己的异常:@Julien Palard,这非常有用。请参阅关于异常的更多信息,Python 3中不存在StandardError
,在Python 2中相当模糊,并且打算作为大多数异常的超类(允许捕获“错误”而不捕获“控制流异常”),而不是实例化Exception
更接近Java。这非常清楚和简洁,这就是我接受它作为答案的原因。一个没什么大不了的简单问题,当我使用你的代码时,我的打印输出在文本异常(“发生了什么事”)后有一个奇怪的逗号,你知道为什么吗?(同样,这个答案正是我所需要的!)@2g7hgfdr8324,它一定是您的环境中的某种东西,如果您测试它,您将无法在您的机器中看到由于某种原因而出现的逗号。
condition = "Foo"
if(condition is "Foo"):
raise Exception("FooException")
#!/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()