Python_异常处理结构与调试
- while True:
- x =input('Pleaes input:')
- try:
- x=int(x)
- print('You have input {0}'.format(x))
- break
- except Exception as e:
- print('Error.')
- try:
- raise Exception('spam','eggs')
- except Exception as inst:
- print(type(inst)) #the exceptiton instance
- print(inst.args) #arguments stored in .args
- print(inst) #__str__ allows args to be printed dierctly.#but may be overidden in exception subclasses
- x,y = inst.args #unpack args
- print('x=',x)
- print('y=',y)
- '''
- 如果try范围内捕获了异常,就执行except块;如果try范围内没有捕获异常,就执行else块。
- '''
- a_list=['China','America','England','Francce']
- while True:
- n=input('请输入字符串的序号')
- try:
- n=int(n)
- print(a_list[n])
- except IndexError:
- print('列表元素的下标越,请重新输入字符串的序号')
- else:
- break
- #查看多个文本文件分别有多少行
- import sys
- for arg in sys.argv[1:]:
- try:
- f=open(arg,'r')
- except IOError:
- print(arg,'has',len(f.readlines()),'lines')
- f.close()
- #要求用户输入整数
- while True:
- x = input('Please input:')
- try:
- x=int(x)
- except Exception as e:
- print('Error.')
- else:
- print('You have input{0}'.format(x))
- break
- '''带多个except的try结构
- try:
- try块 #被监控的语句
- except Exception1:
- except块1 #处理异常1的语句
- except Exception2:
- :except块2 #处理异常2的语句
- '''#例如
- try:
- x=input('请输入整数:')
- y=input('请输入除数:')
- z=float(x) / float(y)
- except ZeroDivisionError:
- print('除数不能为零')
- except TypeError:
- print('被除数和除数应为数值类型')
- except NameError:
- print('变量不存在')
- else:
- print(x,'/',y,'=',z)
- import sys
- try:
- f = open('test.txt')
- s = f.readline()
- i = int(s.strip())
- f.close()
- except OSError as err:
- print('OS error:{0}'.format(err))
- except ValueError:
- print('Could not convert data to an integer.')
- except:
- print('Could not convert data to an integer.')
- raise
- #将要捕获的异常写在一个元组中,可以使用一个except语句捕获多个异常
- import sys
- try:
- f = open('test.txt')
- s = f.readline()
- i = int(s.strip())
- f.close()
- except (OSError,ValueError,RuntimeError,NameError):
- pass
- '''
- try...except...finally结构
- 在该结构中,finally子句中的内存无论是否发生异常都会执行,常用来做一些清理工作以释放ttry子句中申请的资源
- '''
- try:
- 3/0
- except:
- print(3)
- finally:
- print(5)
- #使用异常处理结构保证文件呢总能关闭
- '''如果try子句中的异常没有被处理,或者在except子句或else子句中出现了异常,那么这些异常
- 将会在finally子句执行完成后再次抛除,例如
- try:
- 3/0
- finally:
- print(5)
- '''
- try:
- f = open('test.txt','r')
- line = f.readline()
- print(line)
- finally:
- f.close()
- '''使用带finally子句的异常处理结构时,应尽量避免在finally子句中使用return语句,否则
- 可能出现出乎意料的错误'''
- def demo_div(a,b):
- try:
- return a/b
- except:
- pass
- finally:
- return -1
- demo_div(1,0)
- # -1
- demo_div(1,2)
- # -1
- '''try...except...except...else...finally结构'''
- def div(x,y):
- try:
- print(x/y)
- except ZeroDivisionError:
- print('ZeroDivisionError')
- except TypeError:
- print('TypeError')
- else:
- print('No Error')
- finally:
- print('executing finally clause')
- '''断言与上下文管理是两种比较特殊的异常处理方式,在形式上比异常处理结构要简单一些。
- 断言语句的语法是:
- assert expression[,reason]
- 1.当判断表达式expression为真时,什么都不做,如果表达式为假,则抛出异常
- 2.assert语句一般用于开发程序时对特定必须满足的条件进行验证,仅当__debug__为True时有效.
- 当Python脚本以-O选项编译为字节码文件时,assert语句将被移除以提高运行速度。
- '''
- a = 3
- b = 5
- assert a==b,'a must be equal to b'
- '''上下文管理语句
- 1.使用with自动关闭资源,可以在代码块执行完毕后还原进入该代码块时的现场
- 2.不论何种原因跳出with块,不论是否发生异常,总能保证文件被正确关闭,资源被正确释放
- '''
- with open('sample.txt') as f:
- for line in f:
- print(line,end='')
- '''
- 当发生异常时,Python会回溯异常,给出大量的提示,可能会给程序员定位和纠错带来一定的困难,
- 这时可以使用sys模块来回溯最近一次异常
- example:
- '''
- import sys
- try:
- block
- except:
- tuple = sys.exc_info()
- #sys.exc_info()的返回值是一个三元组(type,message,trackback)
- #type:异常的类型 value/message:异常的信息或者参数 traceback:包含调用栈信息的对象
- #可以直接定位最终引发异常的原因,结果也比较简洁,但是缺点是难以直接确定引发异常的代码位置。
- print(tuple)
- import pdb
- '''
- 1.pdb是Python自带的交互式源代码调试模块,代码文件为pdb.py,但需要导入后才能使用其中的功能,
- 使用该模块可以完成代码调试的绝大部分功能,包括设置/清除(条件)断点、启用/禁用断点、单步执行
- 查看栈帧、查看变量值、查看当前执行位置、列出源代码、执行任意Python代码或表达式等等
- 2.pdb还支持事后调试,可在程序控制下被调用。
- 3.可以通过pdb和cmd接口对该调试器进行扩展。
- '''
- #pdb模块用法主要有三种:
- #1.在交互模式下调试语句快、表达式、函数等多种脚本。
- # (1)pdb.run(statement[,globals[,locals]]):调试指定语句,可选参数globals和locals用来指定代码执行的坏境,默认是__main__模块的字典
- # (2)pdb.runeval(expression[,globals[,locals]):返回表达式的值,其他与run函数一样.
- # (3)pdb.runcall(function[,argument,...]):调试指定函数
- # (4)pdb.post_mortem([traceback]):进入指定trackback对象的时候调试模式,如果没有指定traceback对象,则使用当前正在处理的一个异常
- import pdb
- def f():
- x = 5
- print(x)
- pdb.runcall(f)
- #2.在程序中嵌入调试功能
- #(1)在程序中首先导入pdb模块,然后使用pdb.set_trace()在需要的位置设置断点。
- #(2)在命令提示符环境下执行该程序或双击执行程序时自动打开pdb调试环境,即使该程序当前不处于调试状态。
- import pdb
- n = 37
- pdb.set_trace() #插入断点
- for i in range(2,n):
- if n%i == 0:
- print('No')
- break
- else:
- print('Yes')
- #3.使用命令行调试程序
- #在命令行提示符下执行'pythhon -m pdb脚本文件名',则直接进入调试环境:
- #当调试结束或程序正常结束以后,pdb将重新启动程序:
Python_异常处理结构与调试的更多相关文章
- [Python学习笔记][第八章Python异常处理结构与程序调试]
1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...
- 零基础学Python--------第9章 异常处理及程序调试
第9章 异常处理及程序调试 9.1 异常概述 在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”.这些异常有的是由于开发者将关键字敲错导致的,这类错误多数产生的是SyntaxError ...
- python:异常处理及程序调试
1.异常概述 在程序运行过程中,经常会遇到各种各样的错误.这些错误统称为“异常”,在这些一场中有的是由于开发者将关键词写错导致,这类错误产生的是SyntaxError.invalid syntax(无 ...
- JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署
接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...
- 笔记:Python异常处理与程序调试
Python异常处理与程序调试 Python提供了强大的异常处理机制,通过捕获异常可以提高程序的健壮性.异常处理还具有释放对象,中止循环的运行等作用.在程序运行的过程中,如果发生了错误,可以返回事先约 ...
- Python_异常处理、调试
1.try except 机制 # 错误处理 # 一般程序都要用到错误捕获,当没有加且有错误的时候Python解释器会执行错误捕获,且是一层层向上捕获[所以问题点会在最下面] try: print(' ...
- arm 异常处理结构
概念:正常的程序执行过程中发生暂时的停止称为异常,如果发现异常情况,将会进行异常处理 作用:快速响应用户的行为,提高cpu的响应能力 异常类型: 异常处理的三个步骤: 1.保护现场: 工作模式保存:C ...
- Python异常处理机制、调试、测试
类似于Java的try..catch..finally Java的为try_except_finally try: print('try...') r = / print('result:', r) ...
- python_异常处理_断言
一.Python标准异常 常用异常 Exception 常规错误的基类 AttributeError 试图访问一个对象没有的属性 IOError 输入/ 输出异常,基本上是无法打开文件 ImportE ...
随机推荐
- Cocos2D场景中对象引用为nil时的判断
如果该对象在SpriteBuilder中属性中设置了name,则检查是否 [self.scene getChildByName:@"theNameOfTheNode" recurs ...
- Adobe Premiere 基本使用
第一节 Premiere概述 1.1概述 Premiere是Adobe公司出品的一款用于进行影视后期编辑的软件,是数字视频领域普及程度最高的编辑软件之一.对于学生媒体而言,Premiere完全可以 ...
- Boosting 和梯度Boosting
Boosting方法: Boosting这其实思想相当的简单,大概是,对一份数据,建立M个模型(比如分类),一般这种模型比较简单,称为弱分类器(weak learner)每次分类都将上一次分错的数据权 ...
- 滑动UITableViewCell出现多个按钮
iOS > = 5.0使用第三方效果图 iOS> = 8.0使用系统方法效果图 MGSwipeTableCell(Github上的三方库)- iOS >= 5.0 直接使用比较简单 ...
- saiku应用的调试
ubuntu下解压saiku包后使用: 运行.sh命令(.bat是windows命令).运行时注意权限.可以先chmod a+x *.sh 提示,catali?.sh出错. 这是tomcat的一个文件 ...
- 苹果新的编程语言 Swift 语言进阶(十五)--协议
协议定义了适合某个特定任务或功能需要的方法.属性和其它需求的一个蓝图.协议本身不提供这些需求的实现,它只是描述了一个任务或功能实现的蓝图. 协议与java 语言中的接口定义类似,都是描述了一个实现可以 ...
- How to Send an Email Using UTL_SMTP with Authenticated Mail Server
In this Document Goal Solution References APPLIES TO: PL/SQL - Version 9.2.0.1 to 12.1.0.1 [Re ...
- Android实训案例(五)——四大组件之一ContentProvider的使用,通讯录的实现以及ListView的优化
Android实训案例(五)--四大组件之一ContentProvider的使用,通讯录的实现 Android四大组件是啥这里就不用多说了,看图吧,他们之间通过intent通讯 我们后续也会一一的为大 ...
- redis注册成window服务
注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 开启服务 ...
- JS实现鼠标滚动事件,兼容IE9,FF,Chrome.
<!-- 废话不多说,直接贴代码 --><script type="text/javascript" src="jquery.min.js"& ...