Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python是否有Java等效的抛出新异常(“text here”)_Python_Exception - Fatal编程技术网

Python是否有Java等效的抛出新异常(“text here”)

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

我是一名Java开发人员,对Python不熟悉,我正在将Java类重写为Python类。我试图在Python类中尽可能模仿原始类的流程。Java类有几行代码

    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()