知识回顾:python中的异常处理

在写爬虫程序时遇到一些错误,导致我们的项目不能继续运行下去,所以想到了抛出异常这种方式来使程序继续运行,

并且将爆出的错误写入文本,方便我们来解决

1 什么是异常

当python检测到一个错误时,解释器会指出当前语句已经无法继续执行下去,这个时候就出现了异常

但是,异常是程序出现错误之后而在正常流程控制意外采取的行为

检测和处理异常

检测异常和处理异常有两种主要的形式:try-except和try-finally两种方式

 异常为什么需要处理?

1.实际开发中不能直接讲代码的报错抛给用户,而是通过异常处理的形式给出提示。

2.如果有异常不处理,程序会挂起,异常后的代码都不会执行。这样影响实际程序的使用。

try-except的处理流程:

异常被引发后,try 语句块中异常发生点后的剩余语句不会被执行;

扫描二维码关注公众号,回复: 6038075 查看本文章

Python 解释器搜索对应的异常处理器,一旦找到就开始执行处理器中的代码;

如果没有找到合适的异常处理器, 那么异常就自底向上移交给调用者去处理(最顶层也无法处理则退出程序)。

带有多个 except 的 try 语句

def safe_float(obj):
    try:
        retval = float(obj)
    except ValueError:
        retval = 'could not convert non-number to float'
    except TypeError:
        retval = 'object type cannot be converted to float'
    return retval

 同时处理多个异常的 except 语句

def safe_float(obj):
    try:
        retval = float(obj)
    except (ValueError, TypeError):
        retval = 'argument must be a number or numeric string'
    return retval

异常参数

# multiple exceptions
except (Exception1,..., ExceptionN)[, reason]:
    suite_for_Exception1_to_ExceptionN_with_Argument

上面的reason是一个包含异常代码诊断信息的类实例,异常参数自身会组成一个元组并存储为reason的属性args

获取异常的错误信息:

def safe_float(object):
  try:
      retval = float(object)
  except (ValueError, TypeError), e:
      retval = str(e)
  return retval

else 子句

else子句执行的条件:try范围中的所有代码没有引发异常。

try:
    module.function()
except:
    print 'error'
else:
    print 'success'

异常捕捉:try ..except..finally 

在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等,注意:finally是可选的选项

#1.try...except....finally的使用演示
try:
    f1 = open("test.txt","rU")
    for i in f1:
        i=i.strip()
        print(i)
except Exception as E_results:
    print("捕捉有异常:",E_results)
finally: #finally的代码是肯定执行的,不管是否有异常,但是finally语块是可选的。
    f1.close
    print("我不管,我肯定要执行。")
------------------程序无异常会执行-----------------------------------
ccccccccccd
ddddddddddddddddd
333343434343
safsdfasdfsadfsa
我不管,我肯定要执行。
------------------程序有异常还是会执行----------------------------------
File "D:/pythoyworkspace/file_demo/Class_Demo/Exception_demo.py", line 44, in <module>
捕捉有异常: [Errno 2] No such file or directory: 'tes2t.txt'
    f1.close
我不管,我肯定要执行。
NameError: name 'f1' is not defined
 
#2.注意try..finally的使用,可以没有except。只有try...except.,try...except...finally这三种用法
 
try:
    f1 = open("tes3t.txt","rU")
    for i in f1:
        i=i.strip()
        print(i)
finally: #finally的代码是肯定执行的,不管是否有异常,但是finally语块是可选的。
    print("我不管,我肯定要执行。")
    f1.close
-----------------------有异常的情况 ------------------------------------------------------
 File "D:/pythoyworkspace/file_demo/Class_Demo/Exception_demo.py", line 36, in <module>
恭喜,没有 错误
    f1 = open("tes3t.txt","rU")
我不管,我肯定要执行。
FileNotFoundError: [Errno 2] No such file or directory: 'tes3t.txt'
 
During handling of the above exception, another exception occurred:
 
Traceback (most recent call last):
  File "D:/pythoyworkspace/file_demo/Class_Demo/Exception_demo.py", line 42, in <module>
    f1.close
NameError: name 'f1' is not defined
--------------------------无异常的情况----------------------------------------------------- 
ccccccccccd
ddddddddddddddddd
333343434343
safsdfasdfsadfsa
我不管,我肯定要执行

猜你喜欢

转载自blog.csdn.net/weixin_44303465/article/details/89575470
今日推荐