当我们写的python程序遇到意想不到的问题的时候(比如出现了bug),如果程序不做处理,程序就会异常停止,此时我们可以使用try语句来捕获这些异常,不会使程序异常终止。
定义一个简单函数,传入两个数字,计算a除以b。
def two_num_division(a,b):
c = a / b
print(f'a除以b等于{c}')
当我们执行函数时,看下结果如何?
two_num_division(10,0)
two_num_division(10, 3)
执行结果如下: 程序直接报错分母为0,第二个函数并没有执行
Traceback (most recent call last):
File "/Users/htsc/Desktop/test.py", line 32, in
two_num_division(10,0)
File "/Users/htsc/Desktop/test.py", line 15, in two_num_division
c = a / b
ZeroDivisionError: division by zero
我们用try和except语句改动如下:
def two_num_division(a,b):
try:
c = a / b
print(f'a除以b等于{c}')
except Exception as e:
print(f'报错:{e}')
同样执行上述的两个函数语句,结果如下:第一句报错但是不影响第二个语句执行。
报错:division by zero
a除以b等于3.3333333333333335
通过上述的例子,我们知道try语句当程序报错的时候可以通过except语句捕获异常,并不影响程序往下执行。
整体结构:
try:
代码块
except error:
代码块
except error:
代码块
.....
else:
代码块
finally:
代码块
1 不能只写try语句,最少需要搭配except语句或者finally语句
2 finally语句是不管try语句执行成功或者失败,最后都必须执行该语句中的代码块
3 else语句当try语句没有报错时才执行
4 except语句可以写多个
我们把示例中的函数改造如下:
def two_num_division(a,b):
try:
c = a / b
print(f'a除以b等于{c}')
except ZeroDivisionError:
print('报错:分母不能为0')
except Exception as e:
print(f'报错:{e}')
else:
print('程序没有报错')
finally:
print('程序结束运行')
以上函数包含了try语句的所有内容
1)执行two_num_division(10,0)会执行 except ZeroDivisionError这一句的代码和finally的代码
报错:分母不能为0
程序结束运行
2)执行two_num_division(‘10’,3)会执行 except Exception as e这一句的代码和finally的代码(传入的字符串不支持除法)
报错:unsupported operand type(s) for /: 'str' and 'int'
程序结束运行
3)执行two_num_division(10,3)会执行 try语句/else语句/finally语句的代码
a除a除以b等于3.3333333333333335
程序没有报错
程序结束运行
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习,谢谢大家。