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

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

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

 1 import logging,os
 2
 3 class Fileinfo(object):
 4
 5     def __init__(self,filename):
 6         self.filename=filename
 7
 8     def __enter__(self):
 9         try:
10             with open(self.filename,'r') as new_file:
11                 new_file.seek(0)
12                 content=new_file.read()
13         except IOError:
14             return 'error'
15         else:
16             self.__exit__()
17             return content
18
19
20     def __exit__(self):
21         logging.basicConfig(level=logging.DEBUG)
22         logger=logging.getLogger()
23         logger.setLevel=(logging.DEBUG)
24         hfile=logging.FileHandler(r"C:\Users\Administrator\Desktop\sendlog.log")
25         hfile.setLevel=(logging.DEBUG)
26         formatter=logging.Formatter('[%(asctime)s]'  '%(message)s')
27         hfile.setFormatter(formatter)
28         logger.addHandler(hfile)
29
30         logging.debug(self.filename)
31
32 if __name__=='__main__':
33     c=Fileinfo('C:\\Users\\Administrator\\Desktop\\12.txt')
34     print c.__enter__()

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

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、

 1 import logging,os,urllib
 2
 3 class page(object):
 4     global a
 5     def __init__(self,num):
 6         self.num=num
 7
 8     def get_page(self):
 9         try:
10             new_url=a[self.num]
11             f=urllib.urlopen(new_url)
12             if urllib.urlopen(new_url).code==404:
13                 raise Exception
14         except IndexError:
15             return u'\n超出范围'
16         except Exception:
17             self.__exit__()   #内部方法调用
18             return 'url 404 not found'
19         else:
20             return f.read()
21
22     def __exit__(self):
23         logging.basicConfig(level=logging.ERROR)
24         logger=logging.getLogger()
25         logger.setLevel=(logging.DEBUG)
26         hfile=logging.FileHandler(r"C:\Users\Administrator\Desktop\urllog.log")
27         hfile.setLevel=(logging.DEBUG)
28         formatter=logging.Formatter('[%(asctime)s]''-''%(levelname)s''-''%(message)s')
29         hfile.setFormatter(formatter)
30         logger.addHandler(hfile)
31
32         logging.error(a[self.num])
33
34 if __name__=='__main__':
35     num=int(raw_input('please input a number:\n'))
36     a=['https://wenda.so.com/q/1480716337726538','http://www.cnblogs.com/duyaya/','http://www.cn.com/d/']
37     c=page(num)
38     print c.get_page()

3、

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

要求:

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

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

 1 import logging,os,urllib,re
 2
 3 class page(object):
 4     global a
 5     def __init__(self,num):
 6         self.num=num
 7
 8     def get_page(self):
 9         '''
10         1、先判断URL是否合法:
11             如果不合法,保存日志,并返回'url is wrong'
12             如果合法,判断URL是否可以打开:
13                 如果不可以打开,抛出异常
14                 如果打开,返回页面数据
15
16         '''
17         try:
18             new_url=a[self.num]
19
20             modle_url=re.compile('^(http|https)\:(\/\/|\\\\)\w+\.\w+\.(com|cn)')
21             m1=modle_url.search(new_url)
22
23             if m1==None:
24                 self.__exit__()   #内部方法调用
25                 return u'\n url不合法'
26             else:
27                 f=urllib.urlopen(new_url)
28                 if urllib.urlopen(new_url).code==404:
29                     raise Exception
30         except IndexError:
31             return u'\n超出范围'
32         except Exception:
33             return 'url 404 is not found'
34         else:
35             return f.read()
36
37     def __exit__(self):
38         logging.basicConfig(level=logging.ERROR)
39         logger=logging.getLogger()
40         logger.setLevel=(logging.DEBUG)
41         hfile=logging.FileHandler(r"C:\Users\Administrator\Desktop\urllog.log")
42         hfile.setLevel=(logging.DEBUG)
43         formatter=logging.Formatter('[%(asctime)s]''-''%(levelname)s''-''%(message)s')
44         hfile.setFormatter(formatter)
45         logger.addHandler(hfile)
46
47         logging.error(a[self.num])
48
49 if __name__=='__main__':
50     num=int(raw_input('please input a number:\n'))
51     a=['https://wenda.so.com/q/1480716337726538','http:www.cnblogs.com/duyaya/','http://www.cn.com/d/']
52     c=page(num)
53     print c.get_page()
54 #输入0,可正常打印URL信息
55 #输入1,打印 URL不合格
56 #输入2,打印 URL 404 is not find
57 #输入3,打印 超出范围

转载于:https://www.cnblogs.com/duyaya/p/8284412.html

老王Python-进阶篇4-异常处理1.3(周末习题)相关推荐

  1. python将姓王的都改成老王_老王Python基础+进阶+项目篇(高清无密)

    老王Python教程 基础篇 基础篇1-福利课python先入为主上 基础篇2-福利课-python先入为主下篇 基础篇3-虚拟机安装xubuntu开发环境 基础篇4-linux基本命令以及开发环境 ...

  2. python全套教学免费版_老王Python全套教程完整版

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 课程简介:本套教程为老王的python教程,分基础篇和进阶篇,可以帮助大家从基础学python.基础篇共22课,进阶篇共12课.零基础教学从最基础的知识点 ...

  3. python进阶教程之异常处理

    python进阶教程之异常处理 这篇文章主要介绍了python进阶教程之异常处理,在项目开发中,异常处理是不可或缺的,需要的朋友可以参考下 在项目开发中,异常处理是不可或缺的.异常处理帮助人们debu ...

  4. 三步解决C语言中struct字节对齐问题,Python进阶篇-struct字节对齐问题

    Python进阶篇-struct字节对齐问题 Python进阶篇-struct字节对齐问题 Python调用C的时候,会传递一些复杂的数据结构,例如结构体,这时候就会遇到各种各样字节对齐的问题.下边所 ...

  5. python全套教程-老王Python全套教程完整版

    课程目录 PYthon基础篇 基础篇1-福利课Python先入为主 基础篇2-福利课Python先入为主下 基础篇3-虚拟机安装xubuntu开发环境 基础篇4-linux基本命令以及开发环境 基础篇 ...

  6. python进阶篇:如何进行存档!粉丝特辑!

    python进阶篇:如何进行存档!粉丝特辑! 大家好!制作不易,请求赞赏! 大家一般在制作游戏的时候,都很想制作存档这个功能,但到底怎么做呢? 下面就告诉大家! 1.1基本文件操作 为什么要学这个呢? ...

  7. 老王 python ,

    老王 python , 留言本_python相关的python 教程和python 下载你可以在老王python里寻觅_老王python python 入门教程 python教程 练习题 问答 dja ...

  8. 老王python培训全套教程

    京广源莹都科贸有限公司 北京加动能培训学校 北京加动能培训学校是一家拥有自主知识产权的中小学培训机构. 前台 任职要求: 1.女性,形象气质佳. 2.有相关前台工作经验者优先录取. 3.有良好的沟通能 ...

  9. Python进阶篇---异常处理

    栗子: 举一个花费金币的栗子,假设原始金币有1000,现需要输入一个数字,使得金币数量减少 为防止输入异常信息,需要对程序进行容错异常处理 money = 1000 num = input('plea ...

  10. 老鱼Python数据分析——篇十三:“选股宝”数据下载代码优化

    今天在测试下载本月(5月)数据时发现,只有6号.7号.9号和15号有数据,其他日期的数据都是完全相同的. 如何解决这个问题? 通过观察发现,没有数据或数据读取很慢时,页面上会出现这样的进度条: 所以修 ...

最新文章

  1. numpy库学习 向量 矩阵 均为有两个[[ ,而秩为1的数组只有一个[ np.array([[]]) 与np.array([])的区别
  2. java制作带有logo的二维码,解决zxing中文乱码
  3. 获取Android版本信息和电话信息
  4. LeetCode 1029. 两地调度(贪心)
  5. express框架+fetch/axios.js(本机实现跨域请求)
  6. ct与x光的哪个辐射大_ct和x光哪个辐射大
  7. flume handler
  8. java中各种常见的异常
  9. APP拉新的五种方法,找准目标用户,转为注册用户
  10. 【洛谷试炼场】洛谷新手村——洛谷的第一个任务
  11. VUE 动态响应的实现
  12. statsmodels.stats.proportion.proportions_ztest
  13. 计算机网络第七版--概述知识点总结
  14. python 根据空格切割英文单词
  15. 解决问题就像剥洋葱,解决的关键是基础知识
  16. 老黄历吉日吉时查询接口实现及代码示例
  17. 【面经】字节跳动C++社招5轮面试题分享
  18. 南邮ctf nctf CG-CTF web题writeup
  19. BZOJ1193 马步距离 (贪心)
  20. jtopo新增节点(拖拽节点到画布),<画布放大缩小或拖拽后,新增节点还在鼠标松开得位置>

热门文章

  1. bash 脚本编程2 条件判断 (笔记)
  2. TypeKit ,use online fonts
  3. linux下batik-rasterizer.jar生成图片中文乱码
  4. [转载] CSS模块化【封装-继承-多态】
  5. 为什么分散刷新没有死时间_分散项目为何失败(以及如何处理)
  6. 避免成为垃圾邮件_如何避免犯垃圾
  7. Java零基础学习难吗
  8. 20155222卢梓杰 实验三 免杀原理与实践
  9. C++对象赋值的四种方式
  10. mysql5.6基于GTID主从复制设置