首页 > 解决方案 > python中的其他语句

问题描述

我是python初学者。关于以下代码的两个快速问题:

  1. 为什么我不能执行print("printed valueError")
  2. 为什么不管print("no error occurred")我输入什么,else 语句都会打印出来?

编码:

def int_checker(a,b):
try:
    if isinstance(a,int) and isinstance(b,int):
        print('both integers')
    else:
        raise ValueError
        print('printed ValueError')
except:
    print('error occurred')
else:
    print('no error occurred')
finally:
    print('no error occurred')

print(int_checker(1,2))
print(int_checker(1,'a')

标签: python

解决方案


为什么我不能执行print("printed valueError")

只是因为代码执行会出现raise ValueError异常,直接跳转到该except部分。要解决,您可以换行:

else:
    print('printed ValueError')
    raise ValueError

为什么不管print("no error occurred")我输入什么,else 语句都会打印出来?

您正在使用带有try, catch, else, finally. 它们的顺序是:

  1. try在块中运行代码。
  2. 是不是发生了什么错误
    • True:catch在块中执行代码
    • False:else在块中执行代码
  3. finally在块中运行代码。(这将永远发生!)

综上所述,finally无论执行过程中是否有错误,都会运行代码形式的语句。在大多数情况下,它会被使用,例如当您open在 try 块中提交文件时,从中读取并突然发生错误。在这种情况下,您想要close文件并清除引用。该代码将进入该finally块。


SO上的类似问题:else的目的和最后在异常处理中


推荐阅读