debug #排除程序故障

print()函数常和#号注释结合在一起用来debug

多行注释有两种快捷操作:
1、在需要注释的多行代码块前后加一组三引号'''
2、选中代码后使用快捷键操作:Windows快捷键是ctrl+/,Mac为cmd+/,适用于本地编辑器)

一种异常处理的机制,可以在异常出现时即时捕获,然后内部消化掉,让程序继续运行
try…except…语句

Python的所有报错类型
https://www.runoob.com/python/python-exceptions.html
####################################################################################
总结
针对知识点不熟造成的bug,要记得多复习,查阅笔记,针对性地做练习掌握用法。

针对思维不清的bug,要多用print()函数和#注释一步步地排查错误。

针对容易被忽略的例外情况从而被动掉坑的bug,可以用try...except语句让程序顺利运行。

###################################################################################
BaseException: 包含所有built-in exceptions
所有内置异常的基类
它不应该被用户自定义类直接继承

Exception: 不包含所有的built-in exceptions,
只包含built-in, non-system-exiting exceptions,
像SystemExit类型的exception就不包含在里面。

所有内置的非系统退出类异常都派生自此类。 所有用户自定义异常也应当派生自此类

###############################################################################
try...except语句的用法(可带多个)
try语句工作方式
1.执行try子句(在关键字try和关键字except之间的语句)

2.如果没有异常发生,忽略except子句,try子句执行后结束。

3.执行try子句异常,try子句余下的部分将被忽略
如果异常类型except 之后的名称相符,那么对应的except子句将被执行。
最后执行 try 语句之后的代码。

4.如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中 
##############################################################################
try except 语句还有一个可选的else子句
使用这个子句,那么必须放在所有的except子句之后。
这个子句将在try子句没有发生任何异常的时候执行

name = 0
try:
print(name)
except NameError as a:
print('------>',a)
else:
print('在被检测代码块没有发生异常时执行')

优点:

else 子句比把所有的语句都放在 try 子句里面要好,
这样可以避免一些意想不到的、而except又没有捕获的异常

try:
  name
except NameError as a: #定制什么类型的异常 as
  print('------>',a)
#################################################################################
不管 try 子句里面有没有发生异常,finally 子句都会执行
如果一个异常在 try 子句里(或者在 except 和 else 子句里)被抛出,
而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后被抛出。

try:
d = {}
d['name']
except Exception as e:
print('---->', e)
else:
print('在被检测代码块没有发生异常时执行')
finally:
print('不管被检测的代码块有没有发生异常都会执行')
print('haha')

执行结果:
----> 'name'
不管被检测的代码块有没有发生异常都会执行
haha
###################################################################

import sys
def main():
1/0
name = 0
try:
print(name)
main()
except NameError as a:
print('------>',a)
except: #最后一个except子句可以忽略异常的名称,它将被当作通配符使用
print('Unexpected error:',sys.exc_info()[0])
列子:
print('\n欢迎使用除法计算器!\n') while True:
try:
x = input('请你输入被除数:')
y = input('请你输入除数:')
z = float(x)/float(y)
print(x,'/',y,'=',z)
break # 默认每次只计算一次,所以在这里写了 break。
except ZeroDivisionError: # 当除数为0时,跳出提示,重新输入。
print('0是不能做除数的!')
except ValueError: # 当除数或被除数中有一个无法转换成浮点数时,跳出提示,重新输入。
print('除数和被除数都应该是整值或浮点数!')

############################################################################################################################

# 方式2:将两个(或多个)异常放在一起,只要触发其中一个,就执行所包含的代码。
# except(ZeroDivisionError,ValueError):    #except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组
   #print('你的输入有误,请重新输入!')

# 方式3:常规错误的基类,假设不想提供很精细的提示,可以用这个语句响应常规错误。
# except Exception:               #except BaseException:
  # print('你的输入有误,请重新输入!')

Python 【Debug排除程序故障】的更多相关文章

  1. 用GDB排查Python程序故障

        某Team在用Python开发一些代码,涉及子进程以及设法消除僵尸进程的需求.实践中他们碰上Python程序非预期退出的现象.最初他们决定用GDB调试Python解释器,查看exit()的源头 ...

  2. 笔记:Python异常处理与程序调试

    Python异常处理与程序调试 Python提供了强大的异常处理机制,通过捕获异常可以提高程序的健壮性.异常处理还具有释放对象,中止循环的运行等作用.在程序运行的过程中,如果发生了错误,可以返回事先约 ...

  3. 简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流

    最初的步骤 Python是大小写敏感的 任何在#符号右面的内容都是注释 >>> help('print')在“print”上使用引号,那样Python就可以理解我是希望获取关于“pr ...

  4. 一个python爬虫小程序

    起因 深夜忽然想下载一点电子书来扩充一下kindle,就想起来python学得太浅,什么“装饰器”啊.“多线程”啊都没有学到. 想到廖雪峰大神的python教程很经典.很著名.就想找找有木有pdf版的 ...

  5. python实现FTP程序

    python实现FTP程序 程序源码 上传功能 查看文件 cd功能 创建目录 程序源码 目录结构 服务端 主程序 import optparse import socketserver import ...

  6. python 购物车小程序

    python 购物车小程序 功能要求:1.启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表2.允许用户根据商品编号购买商品3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒4. ...

  7. 用python进行桌面程序开发

    Python是一种面向对象.直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定.这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所 ...

  8. 快速掌握用python写并行程序

    目录 一.大数据时代的现状 二.面对挑战的方法 2.1 并行计算 2.2 改用GPU处理计算密集型程序 3.3 分布式计算 三.用python写并行程序 3.1 进程与线程 3.2 全局解释器锁GIL ...

  9. hadoop学习笔记——用python写wordcount程序

    尝试着用3台虚拟机搭建了伪分布式系统,完整的搭建步骤等熟悉了整个分布式框架之后再写,今天写一下用python写wordcount程序(MapReduce任务)的具体步骤. MapReduce任务以来H ...

随机推荐

  1. StringBuffer 拼写串

    StringBuffer ssBuffer=new StringBuffer(); for (int i = 0; i < lista.size(); i++) { ssBuffer=ssBuf ...

  2. 小程序开发:用原生还是选框架(wepy/mpvue/uni-app/taro)?

    小程序开发:用原生还是选框架(wepy/mpvue/uni-app/taro)? 自 2017-1-9微信小程序诞生以来,历经2年多的迭代升级,已有数百万小程序上线,成为继Web.iOS.Androi ...

  3. 互联网IT当线上出现 bug 时,是怎么处理的?

    线上BUG说处理方法:1.关于线上BUG问题,目前公司有一整套线上故障流程规范,包括故障定义.定级.处理流程.故障处理超时升级机制.故障处理小组.故障处罚(与故障存在时长有关)等:2.最主要的是,线上 ...

  4. v-if与v-show的区别?

    v-if的显示和隐藏实在dom里创建和消除dom节点 v-show是用css样式的display来控制dom节点的显示和隐藏 相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染 ...

  5. Swift 自动引用计数(ARC)

    Swift 使用自动引用计数(ARC)这一机制来跟踪和管理应用程序的内存 通常情况下我们不需要去手动释放内存,因为 ARC 会在类的实例不再被使用时,自动释放其占用的内存. 但在有些时候我们还是需要在 ...

  6. cls只能调用一次实例 第二次None

    class Zarten(): _singleton = None def __new__(cls, *args, **kwargs): print('__new__') if not cls._si ...

  7. Spring Boot项目中MyBatis连接DB2和MySQL数据库返回结果中一些字符消失——debug笔记

    写这篇记录的原因是因为我之前在Spring Boot项目中通过MyBatis连接DB2返回的结果中存在一些字段, 这些字段的元素中缺少了一些符号,所以我现在通过在自己的电脑上通过MyBatis连接DB ...

  8. JS 事件介绍

    1.设置js对象属性为事件处理程序 事件处理程序属性的名字由“on”后面跟着事件名组成.这些属性名 都必须小写 事件处理程序的缺点:设计都是围绕着假设每个事件目标对于每种事件类型将最多只有一个处理程序 ...

  9. STM32第二章I/O端口应用

    STM32F10xxx系列中,有7个I/O端口,每个端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位 ...

  10. PHP中include、require、include_once、require_once的区别

    include:使用include引用外部文件时,只有代码执行到include代码段时,调用的外部文件才会被引用并读取,当引用的文件发生错误时,系统只会给出个警告错误,而整个php文件会继续执行.re ...