欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python异常捕捉处理机制

程序员文章站 2022-07-08 15:50:05
python中捕捉异常常用句式try…except…try 语句按照如下方式工作;首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。如果没有异常发生,忽略 except 子句,try 子句执行后结束。如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except之后的名称相符,那么对应的 except 子句将被执行。如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。一个...

python中捕捉异常常用句式try…except…
python异常捕捉处理机制

try 语句按照如下方式工作;

  • 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
  • 如果没有异常发生,忽略 except 子句,try 子句执行后结束。
  • 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except
    之后的名称相符,那么对应的 except 子句将被执行。
  • 如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。

一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。

一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如:

except (RuntimeError, TypeError, NameError):
    pass

接下来我们来写一个具体的demo来看一下:

try:
    print(a)
except NameError as e:
    print(e)
    
 >>>name 'a' is not defined

以上程序可看到try中执行一个未定义的变量,运行报错,报错信息则被下面except给接住了,并输出了具体的错误信息,错误的类型则为NameError 。

若我们将错误类型修改一下,情况如下示例:

try:
    print(a)
except IOError as e:
    print(e)

会发现执行以上程序仍就报错了,这是因为错误类型本该是NameError ,我们却用IOError 进行接收,发现报错与except中不匹配,则仍旧执行了try中的程序。如果我们在执行时不清楚具体的错误类型,可以用异常的基类,

BaseException或者我们常用的错误类型集合Exception。

try:
    fh = open("testfiles", "r")
    print(fh.readlines())
except BaseException as e:
    print(e)
 
 >>>[Errno 2] No such file or directory: 'testfiles'

try…except…else…

else后面是如果程序执行没有异常的话,则需要在执行一次else里面的内容,若存在异常,则不会执行else里面的内容。

try:
   print('执行程序')
except Exception as e:
    print('异常信息是:'+str(e))
else:
    print('没有异常')
    
>>>执行程序
>>>没有异常 

try…finally…

finally后面是无论以上程序有没有异常报错,都会执行finally里面的内容,起到一个兜底的作用。

try:
   print(abc)
except Exception as e:
    print('异常信息是:'+str(e))
else:
    print('没有异常')
finally:
    print('以上程序执行完毕')
    
>>>异常信息是:name 'abc' is not defined
>>>以上程序执行完毕

raise Exception

抛出异常,rasise是我们手动去抛出的一些异常,可能有些业务规则不满足我们的需求,程序又没有语法实质性的错误,所以我们可以自定义抛出错误。

a = 10
if a>5:
    raise Exception('a不能超过5')
    
>>> Traceback (most recent call last):
>>>  File "E:/Python/selenium/Learn/pythonFirst/firstApi.py", line 45, in <module>
>>>    raise Exception('a不能超过5')
>>>Exception: a不能超过5

还有一些时候我们捕捉到了异常,并不想对其进行处理,想再次把它抛出去,我们还可以这样写:

try:
    print(a)
except NameError:
    print('代码执行中.......')
    raise

>>>代码执行中.......
>>>Traceback (most recent call last):
>>>  File "E:/Python/selenium/Learn/pythonFirst/firstApi.py", line 38, in <module>
>>>    print(a)
>>>NameError: name 'a' is not defined

以上可看到程序捕捉到了NameError,然后再次将其抛了出去。

python异常捕捉处理机制

本文地址:https://blog.csdn.net/qq_42484209/article/details/110826018