• python练习:异常


    异常习题:

    一 编写with操作类Fileinfo(),定义__enter__和__exit__方法。完成功能:

    1.1 在__enter__方法里打开Fileinfo(filename),并且返回filename对应的内容。如果文件不存在等情况,需要捕获异常。

    1.2 在__enter__方法里记录文件打开的当前日期和文件名。并且把记录的信息保持为log.txt。内容格式:"2014-4-5 xxx.txt"

    class Fileinfo(object):
        import time
        newTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    
        def __init__(self, filename):
            self.filename = filename
    
        def __enter__(self):
            try:
                fn = open(self.filename, 'r')
                content = fn.read()
            except Exception as err:
                print(str(err) + "The file doesn't exist.")
            else:
                fn.close()
                return content
    
        def __exit__(self, type, value, traceback):
    
            with open('log.txt', 'a+')as log_fn:
                # 调用类成员,加上类名,eg,Fileinfo.newTime
                log_fn.write('%s %s
    ' % (Fileinfo.newTime, self.filename))
    
    
    with Fileinfo('comment1.txt') as fn:  # __enter__中的返回值给予给fn
        print(fn)
                
    

    二:用异常方法,处理下面需求:

    info = ['http://xxx.com','http:///xxx.com','http://xxxx.cm'....]任意多的网址

    2.1 定义一个方法get_page(listindex) listindex为下标的索引,类型为整数。 函数调用:任意输入一个整数,返回列表下标对应URL的内容,用try except 分别捕获列表下标越界和url 404 not found 的情况。

    2.2 用logging模块把404的url,记录到当前目录下的urlog.txt。urlog.txt的格式为:2013-04-05 15:50:03,625 ERROR http://wwwx.com 404 not foud

    import logging
    import os
    import time
    from urllib import request
    
    info = ['http://www.baidu.com', 'http:///xxx.com', 'http://xxxx.cm']
    
    # 第一步 创建logger对象
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)  # 设置log等级
    # 创建handler,用于写入文件
    rq = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
    log_name = 'log.txt'
    fh = logging.FileHandler(log_name, mode='a')
    fh.setLevel(logging.DEBUG)  # 输出到file的log等级的开关
    # 第三步,定义handler的输出格式
    formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
    fh.setFormatter(formatter)
    # 第四步,将logger添加到handler里面
    logger.addHandler(fh)
    
    
    def get_page(listindex):
        try:
            openurl = request.urlopen(info[listindex])
            content = openurl.read()
            return content
        except IOError:
            logger.error('%s %s
    ' %(info[listindex],'404 not found'))
            print('404')
        except IndexError:
            print('数组下标越界')
    
    
    get_page(1)
    
    

    三:定义一个方法get_urlcontent(url)。返回url对应内容。

    要求:

    1自己定义一个异常类,捕获URL格式不正确的情况,并且用logging模块记录错误信息。

    2 用内置的异常对象捕获url 404 not found的情况。并且print 'url is not found'

     import logging
    import os
    import time
    from urllib import request
    
    
    
    # 第一步 创建logger对象
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)  # 设置log等级
    # 创建handler,用于写入文件
    rq = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
    log_name = 'log.txt'
    fh = logging.FileHandler(log_name, mode='a')
    fh.setLevel(logging.DEBUG)  # 输出到file的log等级的开关
    # 第三步,定义handler的输出格式
    formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
    fh.setFormatter(formatter)
    # 第四步,将logger添加到handler里面
    logger.addHandler(fh)
    
    
    def get_urlcontent(url):
        try:
            openurl = request.urlopen(url)
            content = openurl.read()
        except IOError:
            logger.error('%s %s
    ' %(url,'404 not found'))
            print('404')
        else:
            return content
    
    
    print(get_urlcontent('http://asdwww.baidu.com'))
    
    
  • 相关阅读:
    Android 动画-alpha(渐变透明度动画效果)
    Memento(备忘录)
    Mediator(中介者)
    Iterator(迭代器)
    Command(命令)
    Chain of Responsibility(责任链)
    Template Method(模板方法)
    Interpreter(解释器)
    Proxy(代理)
    Flyweight(享元)
  • 原文地址:https://www.cnblogs.com/hehecat/p/9284688.html
Copyright © 2020-2023  润新知