zoukankan      html  css  js  c++  java
  • 19.异常处理

    异常处理

    1.异常处理

    # 异常处理
    """
    程序错误分为两种:
        1.语法错误 : 代码没有按照python规定的语法去写,处理不了,重写
        2.异常错误 : 在代码语法正确的基础上,程序报错就是异常错误
    
    try...except..
        把所有可能错误的代码放到try代码中
        如果报错,运行except代码块
        
    所有异常类的父类 :BaseException
    所有普通异常的父类 : Exception
    """
    # 1.基本语法
    try:
        lst = [1,2,3]
        print(lst[4])
    except:
        print("有错误")
        
    # 2.带有分支的异常处理
    try:
        lst = [1,2]
        print(lst[4])
        print(aa)
    except IndexError:
        print("索引错误")
    except NameError:
        print("变量不存在")
    except:
        print("有错误")
        
     # 3.StopIteration 捕捉到return返回值
    def mygen():
        yield 1
        yield 2
        return 888
    gen = mygen()
    try:
        print(next(gen))
        print(next(gen))
        print(next(gen))
    except StopIteration as e: #给类的对象起别名,e是对象
        print(e,type(e)) #888 <class 'StopIteration'>
        res = str(e)
        print(res,type(res)) #888 <class 'str'>
        res = eval(res)
        print(res,type(res)) #888 <class 'int'>
    
    # 4.其他异常处理写法
    # (1) try...except...else(二选一)
    """
    总结:
        如果代码正确,执行else分支
        如果代码有错误,执行except分支
    """
    try:
        lst = [1,2,3]
        print(lst[1])
    except:
        print("有错误")
    else:
        print("代码正确")
    
    # (2) try...finally...
    """
    总结:
        无论代码是否有错误,都执行finally代码块;
    应用场景: 
        比如文件操作,必须遇到close()才能保存文件;一旦出现异常,必须在最后执行一次close()
        数据才能保存到文件中,把fp.close()代码写在finally代码块中
    """
    
    # (3) try ...except ... else ...finally..
    print("<===============>")
    try:
        lst = [1,2,3]
        print(lst[4])
    except:
        print("有异常错误")
    else:
        print("正确代码")
    finally:
        print("无论怎样,我的必须执行")
    

    2.主动抛异常

    # 主动抛异常 raise
    """
    语法:
        raise + 异常错误类/异常错误类对象
        
    所有异常类的父类 :BaseException
    所有普通异常的父类 : Exception    
    """
    # 1.抛出系统内置的异常错误类
    # 简写:
    try:
        raise  #  RuntimeError
    except:
        print("出错了")
    
    # 完整写法
    try:
        raise IndexError
    except BaseException:
        print("666")
    
    # 2.自定义异常错误类
    """自定义异常错误类必须继承BaseException,系统才认可"""
    def return_errorinfo(n):
    	import sys
    	f = sys.exc_info()[2].tb_frame.f_back
    	if n==1:		
    		return str(f.f_lineno)      #返回当前行数
    	elif n == 2:	
    		return f.f_code.co_filename #返回文件名	
    
    def get_info(n):
        try:
            raise
        except:
            # 接收错误信息
            return return_errorinfo(n)
    
    class MyError(BaseException):
        def __init__(self,code,msg,file,line):
            self.code = code
            self.msg = msg
            self.file = file
            self.line = line
        def info(self):
            for i in self.__dict__:
                print(self.__dict__[i])
    try:
        raise MyError(404,"错误代码",get_info(2),get_info(1))
    except MyError as e: #e是MyError的对象
        e.info()
    
  • 相关阅读:
    ssh 代理详细解释
    c++ extern c
    php 删除换行符
    doxygen 模板
    php 判断字符串
    php 链接 mysql 数据库
    远程桌面管理:tsmmc.msc在xp系统中的使用
    更改Server 2008域用户密码策略
    Windows Server 2008 IIS7部署
    iis6中FTP配置的技巧和细节
  • 原文地址:https://www.cnblogs.com/jia-shu/p/14157268.html
Copyright © 2011-2022 走看看