Python-异常处理与调试

一.错误
1.有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为 bug,bug 是必须修复的。

2.有的错误是用户输入造成的,比如让用户输入 email 地址,结果得到一个空字符串,这种错误可以通过检查用户输入来做相应的处理。

3.还有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,这类错误也称为异常,在程序中通常是必须处理的,否则,程序会因为各种问题终止并退出。

二.错误处理

1.在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码;

2.Python语言通常都内置了一套 try...except...finally... 的错误处理机制错误处理
try:
print ‘try...‘
r = 10 / 0
print ‘result:‘, r
except ZeroDivisionError, e:
print ‘except:‘, efinally:
print ‘finally...‘
print ‘END‘

try:里面是可能产生异常的代码;except:  捕获异常 finally:无论是否有异常,都执行该代码;

 - 用 try 来运行可能会出错的代码;- 如果执行正确,则except 语句块不会执行;- 如果执行错误,直接跳转至错误处理代码,即except语句块;- 如果有 finally 语句块,不管try语句块内容是否正确,都会执行 finally

3.语句块错误处理

错误有很多种类,如果发生了不同类型的错误,应该由不同的 except语句块处理。因此可以有多个 except 来捕获不同类型的错误。
eroDivisionError:‘, e
print ‘ValueError:‘, e
except ZeroDivisionError, e:
print ‘ZeroDivisionError:‘, e

错误处理
- Python 的错误其实也是 class,所有的错误类型都继承自BaseException;
- 在使用except 捕获该类型的错误,还把其子类也“一网打尽”;

三.读懂复杂的错误
1. 解读错误信息是定位错误的关键。我们从上往下可以看到整个错误的调用函数链。
2. 不捕获错误,Python 解释器会打印出错误信息,但程序也被结束;
3. 捕获错误,就可以把错误信息打印出来,然后分析错误原因,同时,让程序继续执行下去。
4. Python 内置的 logging 模块可以记录错误信息。logging.exception(e)抛出错误
5. 错误是 class,捕获一个错误就是捕获到该 class 的一个实例;
6. Python 的内置函数会抛出很多类型的错误,我们自己编写的函数也可以抛出错误。
7. 可以定义一个错误的 class,选择好继承关系,然后,用raise 语句抛出一个错误的实例;
8. 尽量使用 Python 内置的错误类型抛出错误

四.调试

1.print
第一种方法简单直接粗暴有效,就是用 print 把可能有问题的变量打印出来看看。用 print 最大的坏处是将来还得删掉它,运行结果也会包含很多垃圾信息。

注:print,把你想知道的变量打印出来;缺点是,你将来需要手动删除print

2.断言
- 凡是用 print 来辅助查看的地方,都可以用断言(assert)来替代:;
- 如果断言失败, assert 语句本身就会抛出 AssertionError
- Python 解释器执行时可以用 -O 参数来关闭 assert,把所有的 assert 语句当成 pass。

注:断言, assert (你的预期),“如果没有达到预期显示的内容”

3.logging
- logging 不会抛出错误,而且可以输出到文件;
- logging.info() 就可以输出一段文本到日志文件中。
- logging.basicConfig(level=logging.INFO)指定记录信息的级别,有debug , info , warning , error等几个级别,他们级别依次增大debug < info < warn < error < critical

默认情况下不显示info级别的错误日志,只显示warn及warn以上的错误日志

调整默认级别为info后,可以显示info级别的日志

4. pdb,pycharm中切换到Terminal下执行
- pdb
pdb让程序以单步方式运行,随时查看运行状态。n 可以单步执行代码,p 变量名 来查看变量,q 结束调试,退出程序。

- pdb.set_trace
在可能出错的地方放一个 pdb.set_trace() ,就可以设置一个断点。程序会自动在 pdb.set_trace() 暂停并进入 pdb 调试环境, p 查看变量, c 继续运行。

时间: 2024-10-11 00:19:25

Python-异常处理与调试的相关文章

Python异常处理与程序调试

Python异常处理与程序调试 Python提供了强大的异常处理机制,通过捕获异常可以提高程序的健壮性.异常处理还具有释放对象,中止循环的运行等作用.在程序运行的过程中,如果发生了错误,可以返回事先约定的一个错误代码. "try...except"语句 用于处理问题语句,捕获可能存在的异常.try子句的代码块中放置的可能出现异常的语句,except子句中的代码用于处理异常.当异常出现时,Python会自动生成一个异常对象. >>> try: ... f = open(

Python 异常处理

Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言(Assertions):本站Python教程会具体介绍. python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIter

[转] python程序的调试方法

qi09 原文 python程序的调试方法 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python def debug_demo(val): if val <= 1600 : print "level 1" print 0 elif val <= 3500 : print "level 2" print (val - 1600) * 0.05 elif val

Python 异常处理--raise函数用法

raise语句手工引发一个异常: 1 "raise" [expression ["," expression ["," expression]]] 在Python中,要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称.异常名称标识出具体的类: Python异常处理是那些类的对象.执行raise语句时,Python会创建指定的异常类的一个对象.raise语句还可指定对异常对象进行初始化的参数.为此,请在异常类的名称后添加一个

【Python】代码调试(pdb与logging使用)

一.pdb使用 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等. 在程序中间插入一段程序(import pdb     pdb.set_trace() ),相对于在一般IDE里面打上断点然后启动debug,不过这种方式是hardcode的 1.加入断点 #!/usr/bin/python import pdb _DEBUG = True def debug_d

十一、Python异常处理

Python异常处理 异常抛出机制,为程序开发人员提供了一种在运行时发现错误,进行回复处理,然后继续执行的能力 #!/usr/bin/python try: open('abc.txt') except IOError,msg: pass 抛出机制: 如果在运行时发生异常的话,解释器会查找相应的处理语句(称为handler) 要是在当前函数力没有找到的话,它会将异常传递给上层的调用函数,看看那里能不能处理 如果在最外层(全局"main")还是没有找到的话,解释器就会退出,同时打印出tr

第十节:python异常处理、类

python个人笔记,纯属方便查询. -----------------------python异常处理------------------------- try:         name=['a','b','c']         name[3] except IndexError:         print 'you list is out of range.........' 意思是让原本的错误改成自己想要的错误提示. try:         name=['a','b','c']  

python异常处理和面向对象编程总结

异常处理和面向对象编程,是python编程中,比较重要的基础.在实际生产编程设计和开发中,异常处理和面向读象都是必须在设计和开发过程中充分考虑的.    对于python开发和面向对象这两部分基础,用一个python程序进行封装说明,结果如下: #!/usr/bin/env python # _*_ coding:utf-8 _*_ ################# #异常处理 ################# print ''' 异常处理是用于处理软件或信息系统中出现的异常状况的一种机制,

Python异常处理总结

一.何谓异常处理 在我们调试程序时,经常不可避免地出现意料之外的情况,导致程序不得不停止运行,然后提示大堆提示信息,大多是这种情况都是由异常引起的.异常的出现一方面是因为写代码时粗心导致的语法错误,这种错误在程序编译时就可以发现:另一方面也可能是因为程序逻辑错误,这种错误往往是不可避免地,只能通过异常处理来防止程序退出. 二.异常类型 Python自带的异常处理机制非常强大,提供了很多内置异常类,可向用户准确反馈出错信息.Python是面向对象语言,认为一切皆对象,所以异常也是对象.Python

Python异常处理机制、调试、测试

类似于Java的try..catch..finally Java的为try_except_finally try: print('try...') r = 10 / 0 print('result:', r) except ZeroDivisionError as e: print('except:', e) finally: print('finally...') print('END') try执行一段可能会发送异常的代码,如果有异常情况发送 走except , 如果没有则不走,最后不管代码