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

raise NameError

NameError

Python程序调试

一般用到的程序调试方法

print方法

断言(assert)方法

logging模块

pdb

编辑器自带的调试功能

断言(assert)方法,用于检测某个表达式是否为真

>>> assert 1 == 0, '1 不等于 0'# '1 不等于 0' 是为断言语句加的异常参数

Traceback (most recent call last):

File "", line 1, in

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. 用python编程 商品打折怎么计算_(特价书)从问题到程序:用Python学编程和计算

    前言 第1章 程序设计和Python 1 1.1 计算机和程序1 1.1.1 "是什么"和"怎样做"的知识1 1.1.2 计算和程序3 1.1.3 编程语言7 ...

  2. python queue 调试_学Python不是盲目的,是有做过功课认真去了解的

    有多少伙伴是因为一句'人生苦短,我用Python'萌生想法学Python的!我跟大家更新过很多Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Pyt ...

  3. python 打包 无需安装运行环境_无需Python环境,小白也可以运行的抢票程序

    阅读文本大概需要 5 分钟. 又到周末了,pk 哥抽空对抢票程序作了优化,并把优化后的程序做打包处理,打包后没有 Python 环境的电脑也可以正常运行程序了.前两篇关于抢票的文章没看可点下方链接查看 ...

  4. python断点调试_「Python调试器」,快速定位各种疑难杂症!!!

    在很多的编辑器其实都带着「调试程序」的功能,比如写 c/c++ 的 codeblocks,写 Python 的 pycharm,这种图形界面的使用和显示都相当友好,简单方便易学,这个不是我这篇文章要讲 ...

  5. python以运行效率高著称吗_提升Python程序运行效率的6个方法

    Python是一个很酷的语言,因为你可以在很短的时间内利用很少的代码做很多事情.不仅如此,它还能轻松地支持多任务,比如多进程等.Python批评者有时会说Python执行缓慢.本文将尝试介绍6个技巧, ...

  6. python源码多平台编译_提升Python程序运行效率的6个方法

    Python是一个很酷的语言,因为你可以在很短的时间内利用很少的代码做很多事情.不仅如此,它还能轻松地支持多任务,比如多进程等.Python批评者有时会说Python执行缓慢.本文将尝试介绍6个技巧, ...

  7. cdt规约报文用程序解析_用 Python 撸一个 Web 服务器第3章:使用 MVC 构建程序

    Todo List 程序介绍 我们将要编写的 Todo List 程序包含四个页面,分别是注册页面.登录页面.首页.编辑页面.以下分别为四个页面的截图. 注册页面: 登录页面: 首页: 编辑页面: 程 ...

  8. python中for语句的使用_对Python中for复合语句的使用示例讲解

    当Python中用到双重for循环设计的时候我一般会使用循环的嵌套,但是在Python中其实还存在另一种技巧--for复合语句. 简单写一个小程序,用于延时循环嵌套功能如下: #!/usr/bin/p ...

  9. python 运行程序代码_一些python程序

    <从问题到程序:用Python学编程和计算>--1.2 Python语言简介 本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第1章,第1.2节,作者 ...

最新文章

  1. 最新的B站弹幕和评论爬虫,你们要的冰冰来啦!
  2. 我对编程中常见名词的理解
  3. 在Oracle中实现自增加ID的功能
  4. log4j2 pattern 行号_Springboot整合log4j2日志全解总结
  5. ASP.NET 图片剪辑控件
  6. Easy UI中dategrid的getSelections方法只能获取一个id的解决办法
  7. UVA 10453—— Make Palindrome
  8. FastDFS下的storage服务启动卡住
  9. [转载] python之numpy的基本使用
  10. 应用题分析思路--关注点分离
  11. CentOS 系统sudo命令配置
  12. 【codevs2333】【BZOJ2002】弹飞绵羊[HNOI2010](分块)
  13. IPQ4019 QSDK 下添加EC20链接网络,非内核添加GobiNet 驱动,ipk包方法
  14. 【modelarts】华为人工智能平台_modelarts平台系列教程1
  15. select *和select 字段名
  16. 从零开始做游戏 - 上上下下左右左右BABA
  17. html编辑器有哪些
  18. 计算机0基础知识,计算机基础知识0课件.ppt
  19. Mac电脑上如何关闭屏幕时间
  20. win10计算机信息更改图,win10修改版本信息的简单方法【图文教程】

热门文章

  1. StringUtils
  2. iOS Plist 文件的 增 删 改
  3. win10红色警戒黑屏解决
  4. 基于node.js的压缩合并安装
  5. 尺度空间理论与图像金字塔(二)
  6. SLAM之特征匹配(二)————RANSAC--------翻译以及经典RANSAC以及其相关的改进的算法小结
  7. 使用VS.NET2003编写存储过程
  8. libev源码解析——总览
  9. 深度学习中的优化算法之MBGD
  10. Ubuntu 14.04 64位机上用Caffe+MNIST训练Lenet网络操作步骤