zoukankan      html  css  js  c++  java
  • python异常介绍 try 主动抛出异常 断言

    异常

    '''
    异常是程序运行过程中发生的非正常情况, 是一个错误发生时的信号
    
    异常如果没有被正确处理的话, 将导致程序被终止, 这对于用户体验是非常差的, 可能导致严重的后果
    
    处理异常的目的就是提高程序的健壮性
    '''
    

    常见异常

     

    TypeError: 'int'
    object is not subscriptable
    对象不能被切片
    

      

    TypeError: 'list'
    object is not callable
    对象不能被调用
    

      

    IndexError: list index out of range
    索引超出范围
    

      

    TypeError: 'builtin_function_or_method'
    object is not iterable
    对象不能被迭代
    

      

    KeyError: 'xxx'
    不存在这个key
    

      

    FileNotFoundError: [Errno 2]
    No such file or directory: 'xxxxx'
    文件找不到
    

    异常处理

    # 语法:
    
    try:
    
    ​    可能会出现异常的代码
      放到try里面
    
    except 具体异常类型 as e:
    
    ​    如果真的发生异常就执行except
    

     

    try:
        正常的操作
       ......................
    except:
        发生异常,执行这块代码
       ......................
    else:
        如果没有异常执行这块代码
    

    try-finally 语句

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

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

      

    try:
        fh = open("testfile", "w")
        fh.write("这是一个测试文件,用于测试异常!!")
    finally:
        print "Error: 没有找到文件或读取文件失败"
    

      

    主动抛出异常

    我们可以使用raise语句自己触发异常

    raise语法格式如下:

    raise [Exception [, args [, traceback]]]
    

      

    def functionName( level ):
        if level < 1:
            raise Exception("Invalid level!", level)
            # 触发异常后,后面的代码就不会再执行
    

    断言assert

    Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。

    断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,可以先判断当前系统是否符合条件。

    语法格式如下:

    assert expression 

    等价于:

    if not expression:
        raise AssertionError
    

      

    assert 后面也可以紧跟参数:

    assert expression [, arguments] 

    等价于:

    if not expression:
        raise AssertionError(arguments)
    
  • 相关阅读:
    FCOS及其和Faster R-CNN的区别
    CornerNet: Detecting Objects as Paired Keypoints
    神经网络不收敛的原因
    交叉熵损失函数
    Placeholder_2:0 is both fed and fetched
    使用Lambda解决_inbound_nodes错误
    Python对Dict排序
    对Faster R-CNN的理解(3)
    Keras运行速度越来越慢的问题
    深度卷积网络(DCNN)和人类识别物体方法的不同
  • 原文地址:https://www.cnblogs.com/wakee/p/10921968.html
Copyright © 2011-2022 走看看