zoukankan      html  css  js  c++  java
  • python_异常报错

    一、报错类型

    AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
    IOError 输入/输出异常;基本上是无法打开文件
    ImportError 无法引入模块或包;基本上是路径问题或名称错误
    IndentationError 语法错误(的子类) ;代码没有正确对齐
    IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    KeyError 试图访问字典里不存在的键
    KeyboardInterrupt Ctrl+C被按下
    NameError 使用一个还未被赋予对象的变量
    SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    TypeError 传入对象类型与要求的不符合
    UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
    导致你以为正在访问它
    ValueError 传入一个调用者不期望的值,即使值的类型是正确的

    二、捕获异常

    基本写法:

    try:
        .......要执行的代码
    except '写入异常的类型':
        ..........跳过异常

     异常类只能用在指定的异常情况,如果不能确定异常的类型是不能使用的。

    万能捕获异常:

    Exception 这个异常确实能捕捉所有的异常,但是出现的所有异常都只能执行Exception下的代码。如果需求是出现什么异常就走该异常下的代码,就要换多分支的异常捕捉。 

    try:
        print('-------')
        print('-------')
        print('-------')
        print(y)
        print('======')
    except NameError:
        print('11111')
    except Exception as n: #Exception万能捕捉异常
        print(n)

    多分支:

    try:
        print('-------')
        print('-------')
        print('-------')
        print(x)
        print('======')
    except KeyError:
        pass
    except NameError as n: #类型:值,可以理解成k:v
        print(n)
    else:#当try的代码执行没有报错,就会执行这个代码
        print('没有异常的时候就执行这个代码......')
    finally: #不能tey except 的执行结果,最后都会执行这个代码
        print('最后执行的代码,做清理的代码...')

     为异常类附变量

    try:
        print(yy)
    eccept NameError as n: #NameError as n
        pass

     也可以在多分支后面来一个Exception 

    try:
        print('-------')
        print('-------')
        print('-------')
        print(y)
        print('======')
    except NameError:
        pass
    except KeyError:
        pass
    except ValueError:
        pass
    except Exception: #Exception万能捕捉异常
        print()
    '''
    Python就是逐行读取
    '''

    异常的其他语句写法:

    try: .....except:.....else:....finally:.....

    try:
        print('-------')
        print('-------')
        print('-------')
        print(x)
        print('======')
    except KeyError:
        pass
    except NameError as n: #类型:值,可以理解成k:v
        print(n)
    else:#当try的代码执行没有报错,就会执行这个代码
        print('没有异常的时候就执行这个代码......')
    finally: #不能tey except 的执行结果,最后都会执行这个代码
        print('最后执行的代码,做清理的代码...')

    finally:清理,比如:用户登陆在输入账户或密码错误的时候,就应该要将该页面从服务器端清理掉,不然当用户反复的去调取,就会使服务端死机。

    主动抛出异常:

    try:
        raise TypeError('没有这个key值')
    except KeyError:
        pass
    '''
    Traceback (most recent call last):
        raise TypeError('没有这个key值')
    TypeError: 没有这个key值
    '''

    自定义异常报错:

    class ad(BaseException):
        def __init__(self,msg):
            self.msg=msg
        def __str__(self):
            return self.msg
    
    try:
        raise ad('类型错误')
    except ad as e:
        print(e)

    断言:

    在开发一个程序时候,与其让它运行时崩溃,不如在它出现错误条件时就崩溃(返回错误)。这时候断言assert 就显得非常有用。

    x = 1
    y = 1
    assert x == 4  #当不满足的时候,就不会往下执行代码,
    print(11111)

    使用try..except的方式

    1:把错误处理和真正的工作分开来
    2:代码更易组织,更清晰,复杂的工作任务更容易实现;
    3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

     

    尽量少使用try....except,因为他的可读性差。

  • 相关阅读:
    python面试大全
    python面试2
    python求职之路
    python面试题目
    关于栈的输入顺序和输出顺序
    表单提交中get和post方式的区别
    DOS命令行下mysql 基本命令
    跨站请求伪造CSRF
    Windows上python的virtualenv 安装及使用
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/yangxiang1/p/6759531.html
Copyright © 2011-2022 走看看