#####调试

#####查看日志与断言

'''

抛出异常使用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自动化之调试的更多相关文章

  1. Selenium2+python自动化13-Alert

    不是所有的弹出框都叫alert,在使用alert方法前,先要识别出它到底是不是alert.先认清楚alert长什么样子,下次碰到了,就可以用对应方法解决.alert\confirm\prompt弹出框 ...

  2. Selenium2+python自动化39-关于面试的题

    前言 最近看到群里有小伙伴贴出一组面试题,最近又是跳槽黄金季节,小编忍不住抽出一点时间总结了下, 回答不妥的地方欢迎各位高手拍砖指点.   一.selenium中如何判断元素是否存在? 首先selen ...

  3. Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP

    前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itoo ...

  4. Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP【转载】

    前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itoo ...

  5. flow.ci + Github + Slack 一步步搭建 Python 自动化持续集成

    理想的程序员必须懒惰,永远追随自动化法则.Automating shapes smarter future. 在一个 Python 项目的开发过程中可能会做的事情:编译.手动或自动化测试.部署环境配置 ...

  6. Selenium2+python自动化23-富文本(自动发帖)

    前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴遇到了不知道无从下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容 一.加载配置 1.打开博客园写随笔,首先需要登录,这里为了 ...

  7. Selenium2+python自动化24-js处理富文本(带iframe)

    前言 上一篇Selenium2+python自动化23-富文本(自动发帖)解决了富文本上iframe问题,其实没什么特别之处,主要是iframe的切换,本篇讲解通过js的方法处理富文本上iframe的 ...

  8. Selenium2+python自动化7-xpath定位

    前言 在上一篇简单的介绍了用工具查看目标元素的xpath地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到.这个时候就需要自己手动的去写xpath了,这一篇详细讲解xpath的一些语法. ...

  9. [转] python程序的调试方法

    qi09 原文 python程序的调试方法 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python de ...

随机推荐

  1. Flask 入门一( flask 框架和 flask-script 库)

    Flask 入门一( flask 框架 和 flask-script 库) 一.Flask框架: 1.简介 Flask是一个非常小的Python Web框架,被称为微型框架:只提供了一个稳健的核心,其 ...

  2. opencv7-ml之KNN

    准备知识 在文件"opencv\sources\modules\ml\src\precomp.hpp"中 有cvPrepareTrainData的函数原型. int cvPrepa ...

  3. jqgrid 批量启动所有行为可编辑状态

    有时,为操作方便,需要将jqgrid表格设置为一直处于编辑状态,用户只需要在对应的编辑区填写自己信息,不再频繁的去触发行编辑和保存. 参考代码如下: //$gridCase为传入jqgrid对象 fu ...

  4. sql的一个查询,情景:a表中存在的数据,且在b表中不存在 (not in,not exists

    这里需要强调的是b表中关联字段的值是唯一的这种情况,并且b表尽量是列举类型的,意味着表比较小. ==================== 准备数据: 1. 建两个类似表,test1,test2,只有i ...

  5. javascript删除Cookie的正确方法(转载)

    原来一直以为只要设置javascript的document.cookie对象就能简单的在浏览器端设置和删除cookie值,网上很多文章也是这么教的,但是最近发现简单的设置javascript的docu ...

  6. 带您详细解读分布式文件系统HDFS

    一.HDFS的由来: 本地系统:一个节点作为系统,以前数据是存放在本地文件系统上的,但本地文件系统存在两个问题:1.本地节点存储容量不够大:2.本地节点会坏,数据不够安全.这时,人们开始利用闲置的计算 ...

  7. Python3入门(七)——模块

    在Python中,一个.py文件就称之为一个模块(Module).(例如main.py就称之为main模块) 为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package). ...

  8. 20155202张旭 Exp3 免杀原理与实践

    20155202张旭 Exp3 免杀原理与实践 AV厂商检测恶意软件的方式主流的就三种: 基于特征码的检测 启发式恶意软件检测 基于行为的恶意软件检测 我们要做的就是让我们的恶意软件没法被这三种方式找 ...

  9. EZ 2018 03 30 NOIP2018 模拟赛(六)

    链接:http://211.140.156.254:2333/contest/67 转眼间上次加回来的Rating又掉完了. 这次不知为何特别水,T1想了一段时间没想出来弃了,导致后面心态炸了. T2 ...

  10. ubuntu 桌面操作系统安装WPS办公软件的方法

    1.打开ubuntu系统自带的firefox软件 2.打开linux.wps.cn,并点击立即下载 3. 点击下载deb安装包 4.进入下载目录,sudo dpkg -i wps-office_10. ...