• python 的异常及其处理


    python标准异常

    什么是异常?

      异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行

      一般情况下,在Python无法正常处理程序时就会发生一个异常。

      异常是Python对象,表示一个错误。

      当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行

    以下为简单的try....except...else的语法:

    try:
    <语句>        #运行别的代码
    except <名字><语句>        #如果在try部份引发了'name'异常
    except <名字>,<数据>:
    <语句>        #如果引发了'name'异常,获得附加的数据
    else:
    <语句>        #如果没有异常发生

    try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

    • 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
    • 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
    • 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
    try:
        print('try.......')
        r=10/0
        print('result:',r)
    except ZeroDivisionError  as e:
        print('except',e)
    finally:
        print('finally.....')
    print('END')

    except可以带多种异常类型

    try:
       You do your operations here;
       ......................
    except(Exception1[, Exception2[,...ExceptionN]]]):
       If there is any exception from the given exception list, 
       then execute this block.
       ......................
    else:
       If there is no exception then execute this block.

    try-finally 语句 try-finally 语句无论是否发生异常都将执行最后的代码

    try:
    <语句>
    finally:
    <语句>    #退出try时总会执行
    raise

    手动触发异常:raise 语句允许程序员强制抛出一个指定的异常。

    try:
        raise Exception('错误了。。。')
    except Exception as e:
        print(e)

    用户自定义异常

     在程序中可以通过创建新的异常类型来命名自己的异常(Python 类的内容请参见类)。异常类通常应该直接或间接的从 Exception 类派生,例如:

    class MyError(Exception):
    def __init__(self, value):
    self.value = value

    def __str__(self):
    return repr(self.value)

    try:
    raise MyError('错误信息')
    except MyError as msg:
    print( msg.value)
    #print( msg.args)
    #print( '-----', msg.value)

    6. assert 断言

    assert是用来检查一个条件,如果它为真,就不做任何事。如果它为假,则会抛出AssertError并且包含错误信息。

    a = 1
    assert a < 5
    assert a > 5, '根本没有这会事'
  • 相关阅读:
    很好用的DBHelper类
    .net连接SAP的几种方式
    使用API管理平台的优势
    ASP.NET 2.0中的登陆控件简介
    asp.net 1.1/ 2.0 中快速实现单点登陆
    ASP.NET 2.0 成员资格和角色管理授权
    SqlDataSource 调用带参数的存储过程
    Asp.net中基于Forms验证的角色验证授权
    解释:ASP.NET 2.0 中的窗体身份验证
    SQL JOIN 的用法
  • 原文地址:https://www.cnblogs.com/lanyinhao/p/9197397.html
Copyright © 2020-2023  润新知