为什么try语句在第一个语句后退出,如果它抛出异常?

问题描述:

我是新来的蟒蛇我现在正在学习异常处理。为什么try语句在第一个语句后退出,如果它抛出异常?

try: 
    print(1/0) 
    int(input("number")) 
    import bala 
except ZeroDivisionError: 
    print("Divided by zero") 
except KeyboardInterrupt: 
    print("dont press ctrl C!") 
except ValueError: 
    print("Value should be number") 
except ModuleNotFoundError: 
    print("Module not found") 

第一异常和try语句的剩余部分后上面的代码退出,不执行。我应该为每个语句使用单独的try-except块吗?像这样

try: 
    int(input("number")) 
except ValueError: 
    print("Value should be number") 

try: 
    import bala 
except ModuleNotFoundError: 
    print("Module not found") 
+1

如果你想继续使用你的代码,你应该这样做。在许多情况下,它是没有意义的,因为每行代码都依赖于上面的行。例如,如果我有一个打开文件的异常,那么尝试从中读取文件是没有意义的。 – ivo

如果发生异常,使得Python立即停止执行。您可以通过使用tryexcept来阻止完整的程序停止。但是,如果在try块中发生异常,它将仍然停止执行,并且只有在适当的except块捕获到异常(或存在finally块)时才会继续执行。

总之:如果你想继续下一个陈述,你需要使用单独的tryexcept块。但是如果你想执行下面的语句只有如果前面的语句没有提出异常,你不应该使用单独的tryexcept块。

+1

一个小问题,应该是:只有在前面的语句工作时才执行下一个语句......有人可能会认为这个语句块是原子的。 – ivo

+0

@ivo是的。我编辑它以避免含糊不清。谢谢 :) – MSeifert

是的,你需要有单独的异常块,因为如果它得到通过的第一个块,它认为多数民众赞成它需要获得通过,因此,如果你想测试每个人,你应该使用单独的

你必须使用多个try/except块。

一旦发现错误,发生的任何事情都会停止,并处理异常。

认为这是一场火灾。当发生火灾时,你会停止并消失。对于python,它处理异常