六、异常处理、日志打印、文件操作
时间:2020-04-25
本文章向大家介绍六、异常处理、日志打印、文件操作,主要包括六、异常处理、日志打印、文件操作使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
异常处理
场景:日常开发中,有些代码块你不能保证它是否会成功运行,比如连接hive时,如果网络不好可能会连接失败,报请求超时等错误,那么此时我们不希望这个错误被报出来,我可以尝试再次连接或者是换一种方式去连接等,此时就需要用到异常处理功能了。
1.try…except结构
异常处理结构中最常见也最基本的结构。其中try子句中的代码块包含可能出现的语句,而except子句用来捕捉并处理异常。如果try中的代码块没有出现异常,则继续往下执行。
import requests
from requests import ReadTimeout
def get_page(url):
try:
response = requests.get(url, timeout=1)
if response.status_code == 200:
return response.text
else:
print('Get Page Failed', response.status_code)
return None
# except (ConnectionError, ReadTimeout): #捕捉指定的异常
# print('Crawling Failed', url)
# return None
except Exception: #捕捉所有异常
print('Crawling Failed', url)
return None
def main():
url = 'https://www.baidu.com'
print(get_page(url))
if __name__ == '__main__':
main()
2. try …except…else结构
带else子句的异常处理结构是一种特殊形式的选择结构。如果try中的代码抛出了异常,并且被某个except捕获,则执行相应的异常处理代码,这种情况下不会执行else中的代码。如果try中的代码没有抛出任何异常,则执行else块中的代码。
def get_page():
try:
url = ['45','6789']
print(url)
except Exception: # 捕捉所有异常
print('发生错误了,但是被我捕获到了,哈哈哈哈。。')
return None
else:
print(url[0])
def main():
get_page()
if __name__ == '__main__':
main()
3. try…except…finally结构
该结构指中finally子句中的语句块指无论是否发生异常都会执行
def get_page():
try:
url = ['45','6789']
print(url[3])
except Exception: # 捕捉所有异常
print('发生错误了,但是被我捕获到了,哈哈哈哈。。')
return None
else:
print('只有在没有发生错误的时候我才能执行')
finally:
print("无论try是否发生错误,我都会执行的")
def main():
get_page()
if __name__ == '__main__':
main()
log日志
import logging
# 第一步,创建一个logger
logger = logging.getLogger()
logger.setLevel(logging.INFO) # Log等级总开关
# 第二步,创建一个handler,用于写入日志文件
logfile = './log2.txt'
fh = logging.FileHandler(logfile, mode='a')
fh.setLevel(logging.DEBUG) # 用于写到file的等级开关
# 第三步,再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING) # 输出到console的log等级的开关
# 第四步,定义handler的输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# 第五步,将logger添加到handler里面
logger.addHandler(fh)
logger.addHandler(ch)
if __name__ == '__main__':
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message' )
文件操作
1.文件介绍
文件包括文本文件和二进制文件(声音、图像、视频)
2.读文件
#打开文件
f = open('./test.txt','r')
#读取文件
f.read()
#关闭文件
f.close()
上一步的操作相当于
with open('./test.txt','r') as f:
print(f.read())
3.文件的打开方式
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
原文地址:https://www.cnblogs.com/lpdeboke/p/12773857.html
- Qt Style Sheet实践(一):按钮及关联菜单
- Python基础06 循环
- js也可以有自定义事件 注入就是这么爽
- Python基础05 缩进和选择
- Python基础04 运算
- 剑指OFFER之二叉树中和为某一值的路径(九度OJ1368)
- Python基础03 序列
- Python基础02 基本数据类型
- 用命令重启IIS 常重启IIS的朋友看过来
- Python基础01 Hello World!
- 剑指OFFER之从上往下打印二叉树(九度OJ1523)
- 给你的博客加上“Fork me on Github”彩带
- Android Studio添加PNG图片报错原因
- 剑指OFFER之包含min函数的栈(九度OJ1522)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python第四十一课——析构函数
- python第四十二课——__str__(self)函数
- python第四十三课——封装性
- Nginx+Tomcat多实例及负载均衡配置
- python第四十四课——继承性之单继承
- python第四十五课——继承性之多重继承
- Linux系统——keepalived高可用集群服务
- python第四十五课——继承性之多继承
- HTTP服务器Nginx服务介绍续
- python第四十六课——函数重写
- Linux系统Memcached服务介绍
- python第四十七课——类属性和函数属性
- python第四十八课——类函数和对象函数
- python第四十九课——对象序列化与反序列化
- python第五十课——多态性