输入与预期不匹配,触发异常,程序退出:
一、异常处理:使用try、except进行错误处理
为了保证程序运行的稳定性,错误应该被程序捕捉并合理控制
- Python使用保留字try和except进行异常处理。
- 语句块1是正常执行的程序内容,当执行这个语句块发生异常时,即执行except后面的语句块2
try:
n = eval(input("请输入一个数字:"))
print("输入数字的3次方值为:", n ** 3)
except:
print("输入错误,请输入一个数字!")
请输入一个数字:abc
输入错误,请输入一个数字!
二、异常处理:使用try、except处理程序运行错误
以下语句发生除零的情况,程序报错:
捕捉错误:
try:
for i in range(4):
print(10 / i, end="")
except:
print("某种原因,出错了!")
某种原因,出错了!
三、异常处理:使用try、except处理特定的错误类型
在except后指明错误类型,大小写敏感。
try:
for i in range(5):
print(10/i, end="")
except ZeroDivisionError:
print("除数为零,产生了除零错误!")
except:
print("某种原因,出错了!")
编写程序中,建议在输入合规性判断、保证关键代码可靠性等方面广泛使用异常处理机制。
四、捕获多个异常类型
当捕获多个异常时,可以把要捕获的异常类型的名字,放到except 后,并使⽤元组的⽅式进⾏书写。
try:
print(1/0) # 如果没有异常,执行的语句
except (NameError, ZeroDivisionError): # 可能的异常类型
print("there is an error.") # 如果出现异常,执行的语句
五、捕获异常描述信息
print(1/0)
输出:
捕获异常信息:except 异常类型 as 变量名:,然后打印变量名
try:
print(1/0)
except (NameError, ZeroDivisionError) as result:
print(result)
输出:
六、捕获所有异常
**Exception是所有程序异常类的⽗类。**不需要书写具体的异常类型了。
- Exception大小写敏感
try:
print(1/0)
except Exception as result:
print(result)
输出:
七、try、except高级用法
- 执行逻辑:Python先执行语句块1,如果语句块1不发生异常则奖励性地执行else语句块3;如果发生了异常则执行except语句块2;无论是否发生异常,最后都要执行finally语句块4.
- 一个这样写的理由是:如果finally里有一个语句可能会发生异常,你可以把这个可能的异常放在外层,在外层来处理掉它,让finally语句顺利final。用来测试程序是不是考虑周全可以final了。
- 反对这种写法的一个理由是:在很多情况下,异常处理器需要做一些扫尾工作。
- 一个最终的注意点:如果 finally 中的代码引发了另一个异常或由于 return,break,continue 语法而终止,原来的异常将丢失而且无法重新触发。
try:
print(1)
except Exception as result:
print(result)
else:
print("我是else,是没有异常的时候执⾏的代码")
输出:
1
我是else,是没有异常的时候执⾏的代码
try:
f = open("test.txt", "r"