python自动化之调试
#####调试
#####查看日志与断言
'''
抛出异常使用raise语句.在代码中,raise语句包含以下部分:
(1)raise关键字;
(2)对Exception函数的调用;
(3)传递给Exception函数的字符串,包含有用的出错信息
'''
###########################################抛出异常####################################
def boxPrint(symbol,width,height):
if len(symbol)!=1:
raise Exception('Symbol must be a single character string.')
if width<=2:
raise Exception('Width must be greater than 2.')
if height<=2:
raise Exception('Height must be greater than 2.')
print(symbol*width)
for i in range(height-2):
print(symbol+(' '*(width-2))+symbol)
print(symbol*width)
for sym,w,h in (('*',4,4),('0',20,5),('x',1,3),('ZZ',3,3)):
try:
boxPrint(sym,w,h)
except Exception as err:
print('An exception happened: '+str(err))
#######################################取得反向跟踪的字符串####################################
'''
反向跟踪包含了出错信息、导致该错误的代码行号,以及导致该
错误的函数调用的序列.这个序列称为“调用栈”
'''
'''
调用traceback.format_exc(),得到抛出异常的字符串形式.
可以将反向跟踪信息写入一个日志文件,并让程序继续运行
'''
import traceback
try:
raise Exception('This is the error message.')
except:
errorFile=open('errorInfo.txt','w')
errorFile.write(traceback.former_exc())
errorFile.close()
print('The traceback info was written to errorInfo.txt.')
#######################################断言####################################
'''
"断言"是一个心智正常的检查,确保代码没有做什么明显错误的事.
这些心智正常的检查由assert语句执行.如果检查失败,就会抛出异常
assert语句包含以下部分:
(1)assert关键字;
(2)条件(即求值为);
(3)逗号;
(4)当条件为False时显示的字符串
'''
podBayDoorStatus='open'
assert podBayDoorStatus=='open','The pod bay doors need to be "open".'
podBayDoorStatus='I \'m sorry,Dave.I \'m afraid I can\'t do that.'
assert podBayDoorStatus=='open','The pod bay doors need to be "open".'
#######################################禁用断言#######################################
'''
在运行Python时传入-O选项,可以禁用断言
'''
#######################################日志###########################################
'''
Python的logging模块使得你很容易创建自定义的消息记录.
这些日志消息将描述程序执行何时到达日志函数调用,
并列出你指定的任何变量当时的值.
另一方面,缺失日志信息表明有一部分代码被跳过,从未执行
'''
#######################################使用日志模块###################################
'''
要启用logging模块,在程序运行时将日志信息显示在屏幕上,
请将下面的代码复制到程序顶部(但在Python的#!行之下)
'''
import logging
logging.basicConfig(level=logging.DEBUG,format=' %(asctime)s-%(levelname)s-%(message)s')
'''
当Python记录一个事件的日志时,它会创建一个LogRecord对象,保存关于该事件的信息.
logging模块的函数让你指定想看到的这个LogRecord对象的细节,以及希望的细节展示
方式.
'''
import logging
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s-%(levelname)s-%(message)s')
logging.debug('Start of program')
def factorial(n):
logging.debug('Start of factorial (%s%%)'%(n))
total=1
for i in range(n+1):
total*=i
logging.debug('i is '+str(i)+',total is '+str(total))
logging.debug('End of factorial (%s%%)'%(n))
print(factorial(5))
logging.debug('End of program')
'''
logging.debug()调用不仅打印出传递给它的字符串,而且包含一个时间戳和单词DEBUG
'''
#######################################不要用print()调试###################################
'''
1、每次清楚print()调用,可能删除了不是用来产生日志消息的
2、日志消息好处:可以随心所欲地在程序中想加多少就加多少,稍后
只要加入一次logging.disable(logging.CRITICAL)调用,就可以禁止日志
'''
#######################################日志级别###################################
'''
Python中的日志级别(从最不重要到最重要)
级别 日志函数 描述
DEBUG logging.debug() 最低级别.用于小细节,通常只有在诊断问题时,才会关心这些消息
INFO logging.info() 用于记录程序中一般事件的消息,或确认一切工作正常
WARNING logging.warning() 用于表示可能的问题,它不会阻止程序的工作,但将来可能会
ERROR logging.error() 用来记录错误,它导致程序做某事失败
CRITICAL logging.critical() 最高级别.用来表示致命的错误,它导致或将要导致程序完全停止工作
'''
'''
日志级别的好处是:可以改变想看到的日志消息的优先级
向basicConfig()函数传入logging.DEBUG,将显示所有日志级别的消息
传入logging.error,将只显示ERROR和CRITICAL消息,跳过DEBUG、INFO和WARNING消息
'''
#######################################禁用日志###################################
'''
logging.disable()函数禁用日志信息,只要向logging.disable()传入一个日志级别
它就会禁止该级别和更低级别的所有日志消息.如果想要禁用所有日志,只要在程序中
添加logging.disable(logging.CRITICAL)
'''
import logging
logging.basicConfig(level=logging.INFO,format='%(asctime)s-%(levelname)s-%(message)s')
logging.critical('Critical error!Critical error!')
logging.disable(logging.CRITICAL)
logging.critical('Critical error!Critical error!')
logging.error('Error!Error!')
##################################将日志记录到文件###################################
import logging
logging.basicConfig(filename='myProgramLog.txt',level=logging.DEBUG,format='%(asctime)s-%(levelname)s-%(message)s')
##################################调试###################################
'''
GO、Step、Over、Out、Quit:
Step按钮让调试器进入函数调用
Over按钮将快速执行函数调用,不会单步进入其中
Out按钮将快速执行余下的代码,直到走出当前所处的函数
Go:调试器将在程序末尾或断点处停止
'''
'''
写assert语句,如果变量spam是一个小于10的整数,就触发AssertionError
1、assert(spam>=10,'The spam variable is less than 10.')
写assert语句,如果eggs和bacon包含的字符串相同,而且不论大小写,就触发AssertionError
2、assert(eggs.lower()!=bacon.lower(),'The eggs and bacon variables are the same!')
写assert语句,总是触发AssertionError
3、assert(False,'This assertion always triggers.')
'''
python自动化之调试的更多相关文章
- Selenium2+python自动化13-Alert
不是所有的弹出框都叫alert,在使用alert方法前,先要识别出它到底是不是alert.先认清楚alert长什么样子,下次碰到了,就可以用对应方法解决.alert\confirm\prompt弹出框 ...
- Selenium2+python自动化39-关于面试的题
前言 最近看到群里有小伙伴贴出一组面试题,最近又是跳槽黄金季节,小编忍不住抽出一点时间总结了下, 回答不妥的地方欢迎各位高手拍砖指点. 一.selenium中如何判断元素是否存在? 首先selen ...
- Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP
前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itoo ...
- Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP【转载】
前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itoo ...
- flow.ci + Github + Slack 一步步搭建 Python 自动化持续集成
理想的程序员必须懒惰,永远追随自动化法则.Automating shapes smarter future. 在一个 Python 项目的开发过程中可能会做的事情:编译.手动或自动化测试.部署环境配置 ...
- Selenium2+python自动化23-富文本(自动发帖)
前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴遇到了不知道无从下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容 一.加载配置 1.打开博客园写随笔,首先需要登录,这里为了 ...
- Selenium2+python自动化24-js处理富文本(带iframe)
前言 上一篇Selenium2+python自动化23-富文本(自动发帖)解决了富文本上iframe问题,其实没什么特别之处,主要是iframe的切换,本篇讲解通过js的方法处理富文本上iframe的 ...
- Selenium2+python自动化7-xpath定位
前言 在上一篇简单的介绍了用工具查看目标元素的xpath地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到.这个时候就需要自己手动的去写xpath了,这一篇详细讲解xpath的一些语法. ...
- [转] python程序的调试方法
qi09 原文 python程序的调试方法 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python de ...
随机推荐
- Python2.7-os.path
os.path 模块,实现了对文件路径的操作,但是不操作文件.由于不同系统文件路径格式不同,os.path 总是调用适合当前系统的版本,你也可以手动导入别的系统的(posixpath,ntpath,m ...
- web.py利用模板的详细步骤
<python网络编程学习笔记(10):webpy框架>(http://www.cnblogs.com/xiaowuyi/archive/2012/11/15/2771099.html#3 ...
- Apache服务器笔记
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源代码的网页服务器软件,可以在大多数电脑操作系统中运行,由于其跨平台和安全性.被广泛使用,是最流行的Web服务 ...
- tomcat-在eclipse中配置tomcat容器的内存
eclipse下的tomcat内存设置大小 在eclipse中设置: 设置步骤如下: 1.点击eclipse上的debug图标旁边的下拉箭头 2.然后选择Run Configurations, 3.系 ...
- # 《网络对抗》Exp1 PC平台逆向破解20155337祁家伟
<网络对抗>Exp1 PC平台逆向破解20155337祁家伟 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会 ...
- 20155339 Exp8 Web基础
Exp8 Web基础 基础问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能. 一个表单有三个基本组成部分: 表单标签,这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方 ...
- Flutter - 创建侧滑菜单(不使用navigatior,仅改变content)
之前写过一篇文章,Flutter - 创建横跨所有页面的侧滑菜单.这个里面中使用了Navigator.of(context).push来导航到新的页面. 这次介绍一种不使用导航,仅仅改变content ...
- GIT版本控制工具总结
1.安装GIT 现在的Linux和Unix包括MAC有的已经自带git,没有自带git的话,在Debian或Ubuntu Linux系统下执行sudo apt-get install git或者sud ...
- 阿里云ESC入网和出网指的什么
什么是入网带宽和出网带宽 云服务器 ECS 的入网带宽和出网带宽皆以服务器角度出发.下表给出了入网带宽和出网带宽的具体内容: 带宽类别 (Mbit/s) 描述 入网带宽 流入云服务器 ECS 的带宽从 ...
- PAT甲题题解-1119. Pre- and Post-order Traversals (30)-(根据前序、后序求中序)
(先说一句,题目还不错,很值得动手思考并且去实现.) 题意:根据前序遍历和后序遍历建树,输出中序遍历序列,序列可能不唯一,输出其中一个即可. 已知前序遍历和后序遍历序列,是无法确定一棵二叉树的,原因在 ...