笔记:Python异常处理与程序调试
Python异常处理与程序调试
Python提供了强大的异常处理机制,通过捕获异常可以提高程序的健壮性。异常处理还具有释放对象,中止循环的运行等作用。在程序运行的过程中,如果发生了错误,可以返回事先约定的一个错误代码。
"try...except"语句
用于处理问题语句,捕获可能存在的异常。try子句的代码块中放置的可能出现异常的语句,except子句中的代码用于处理异常。当异常出现时,Python会自动生成一个异常对象。
>>> try:
... f = open('test.txt', 'r')
... print("该文件是正常的")
# 捕获IO异常
... except IOError:
... print("该文件不存在")
# 其他异常情况
... except:
... print('程序异常')
... else:
... print('文件打开成功')
f.close()
该文件不存在
>>>
try...except后边还可以添加一个finally语句,无论异常是否发生,finally子句都会被执行。所有finally子句均用于关闭因异常而不能释放的系统资源。
try:
f = open('test.txt', 'r')
try:
print(f.read())
except:
print('该文件是正常的')
finally:
print('释放资源')
f.close()
except IOError:
print('文件不存在')
with...as
with...as(上下文管器)可以很简洁的实现以上功能
with open('test.txt', 'r') as f:
f.write('hrllo ')
f.write('world ')
with...as可以处理出现异常的情况,并且避免了在open()一个文件后忘记写close()方法的情况
raise
当程序出现错误时,Python会自动引发异常,也可以通过raise语句显示引发的异常,一旦执行了raise语句,raise 语句后的代码将不能被执行
try:
s = None
if s is None:
print('s是空对象')
raise NameError
print(len(s))
except TypeError:
print('空对象是没有长度的')
s是空对象
Traceback (most recent call last):
File "异常处理.py", line 21, in <module>
raise NameError
NameError
Python程序调试
一般用到的程序调试方法
- print方法
- 断言(assert)方法
- logging模块
- pdb
- 编辑器自带的调试功能
断言(assert)方法,用于检测某个表达式是否为真
>>> assert 1 == 0, '1 不等于 0' # '1 不等于 0' 是为断言语句加的异常参数
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: 1 不等于 0
>>>
logging模块
如果Python程序代码量到了一定数量,使用logging模块是一个很好的选择,logging不仅可以输出到控制台,还可以写入文件,还可以使用TCP将日志发送到网络。
import logging
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
# 输出结果:
WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message
默认情况下,logging模块将日志打印到屏幕(stdout),日志级别为WARNING(只有日志级别高于WARNING的日志才会输出)
pdb
Python的调试器,可以让程序单步执行,随时查看程序运行状态
执行python3 -m pdb test.py
"l"表示查看代码完整内容,"n"表示一步一步执行代码,"p+变量名"可以随时打印出程序的变量名,"q"退出
笔记:Python异常处理与程序调试的更多相关文章
- python:异常处理及程序调试
1.异常概述 在程序运行过程中,经常会遇到各种各样的错误.这些错误统称为“异常”,在这些一场中有的是由于开发者将关键词写错导致,这类错误产生的是SyntaxError.invalid syntax(无 ...
- 零基础学Python--------第9章 异常处理及程序调试
第9章 异常处理及程序调试 9.1 异常概述 在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”.这些异常有的是由于开发者将关键字敲错导致的,这类错误多数产生的是SyntaxError ...
- python学习笔记(六)——程序调试
在我们平时编写程序时,常常会遇到各种错误,俗称BUG.而我们程序猿的工作常常需要对程序进行调试,也就是所谓的debug. 程序调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法 ...
- Python异常处理机制、调试、测试
类似于Java的try..catch..finally Java的为try_except_finally try: print('try...') r = / print('result:', r) ...
- Day12 Java异常处理与程序调试
什么是异常? 不正常的,会影响程序的正常执行流程. 例如下面的程序 public static void main(String[] args) { TestDemo1 t = new TestDem ...
- [Python学习笔记][第八章Python异常处理结构与程序调试]
1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...
- 【Python笔记】异常处理
1 什么是异常 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误. 当Pytho ...
- React学习笔记--程序调试
React学习笔记 二 程序调试 前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...
- C++ Primer 学习笔记_87_用于大型程序的工具 --异常处理
用于大型程序的工具 --异常处理 引言: C++语言包括的一些特征在问题比較复杂,非个人所能管理时最为实用.如:异常处理.命名空间和多重继承. 相对于小的程序猿团队所能开发的系统需求而言,大规模编程[ ...
随机推荐
- 42 github 开源代码 ——README.md语法/相关操作等
0 引言 最近在github上开源了pro/E二次开发的代码,发现README.md的编辑方式很有趣,需要稍微了解一下. 1 markdown语法 参考了两篇博客的内容,链接如下. https://b ...
- js的线程和同步异步以及console.log机制
项目上线了,闲下来就写写东西吧.积累了好多东西都没有做笔记~挑几个印象深刻的记录一下吧. js的同步异步以及单线程问题: 都知道单线程是js的一大特性.但是通常io(ajax获取服务器数据).用户/浏 ...
- (转)在eclipse中将android项目生成apk并且给apk签名
转:http://www.cnblogs.com/tianguook/archive/2012/09/27/2705724.html 生成apk最懒惰的方法是:只要你运行过android项目,到工作目 ...
- golang的select典型用法
golang 的 select 的功能和 select, poll, epoll 相似, 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作. 示例: ch1 := make (chan in ...
- Go的异常处理 defer, panic, recover
Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常, ...
- 关于idea中,web项目启动tomcat,访问资源报错404
背景: web项目启动tomcat,访问相应的资源,报错404,前提资源路径是没错的. 原因: 1.确定是不是web项目 不是的话: 配置web-inf的路径和webroot(web根目录)的路径 2 ...
- 6、 restful API
RESTful 一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. RE ...
- python 15 文件操作(一)
转自 http://www.cnblogs.com/BeginMan/p/3166644.html 一.文件对象 我理解的文件对象就是一个接口,通过这个接口对文件进行相关操作. <Python ...
- js面向对象编程:this究竟代表什么?第二篇
总觉得自己弄明确了js中this的含义.this总是指向调用方法的对象,作为方法调用,那么this就是指实例化的对象.但前几天自己写脚本却遇到了一个非常奇怪的问题. 代码例如以下: ...
- Nginx常用功能配置一
Nginx常用功能配置 参数include配置 说明:如果日常工作中server标签存在太多,可以采用include配置模式,Nginx的主配置文件包含的所有虚拟主机的子配置文件会统一放入extra目 ...