python中使用try语句捕获程序异常

当我们写的python程序遇到意想不到的问题的时候(比如出现了bug),如果程序不做处理,程序就会异常停止,此时我们可以使用try语句来捕获这些异常,不会使程序异常终止。

python中使用try语句捕获程序异常_第1张图片

先看一个示例

定义一个简单函数,传入两个数字,计算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语句捕获异常,并不影响程序往下执行。

整体结构:

try:

   代码块

except error:

   代码块

except error:

   代码块

.....

else:

    代码块

finally:

   代码块

1 不能只写try语句,最少需要搭配except语句或者finally语句

2 finally语句是不管try语句执行成功或者失败,最后都必须执行该语句中的代码块

3 else语句当try语句没有报错时才执行

4 except语句可以写多个

  • except后面可以填写具体的报错信息,比如常见的SyntaxError,ZeroDivisionError,NameError等
  • 可以什么也不填
  • 可以填写非具体的报错信息,比如Exception,用于捕获一些常见或者自定义的异常

我们把示例中的函数改造如下:

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
程序没有报错
程序结束运行

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

你可能感兴趣的:(python编程,python,开发语言)