3

Python__20-- 常见Bug

 2 years ago
source link: https://blog.51cto.com/husheng/5983400
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一杯茶,一包烟,一个Bug改一天

程序错误,即英文的Bug,也称为缺陷、臭虫,是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。 早期的计算机由于体积非常庞大,有些小虫子可能会钻入机器内部,造成计算机工作失灵。史上的第一只 "Bug" ,真的是因为一只飞蛾意外走入一电脑而引致故障,因此Bug从原意为臭虫引申为程序错误。 一些有趣的Bug有时也会成为一种乐趣。在电脑游戏中,一些Bug,假如不令游戏出现大错误的话,经常会变成一种玩游戏时的秘技。

2 语法错误

  • 粗心、粗心、还是粗心
  • 如:注意input('哈哈年龄')获取的都是字符串类型

3 异常处理

异常:

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 一般情况下,在Python无法正常处理程序时就会发生一个异常。 异常是Python对象,表示一个错误。 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

处理:

捕捉异常可以使用try/except语句。 try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。 如果你不想在异常发生时结束你的程序,只需在try里捕获它。

3.1 try……except 某错误

测试代码:

try:
a=int(input('请输入第一个整数'))
b=int(input('请输入第二个整数'))
result=a/b
print('结果为:',result)

except ZeroDivisionError:
print('对不起,除数不允许为0')

except ValueError:
print('对不起,只能输入数字串')

print('程序结束')

测试结果1:

请输入第一个整数python 对不起,只能输入数字串 程序结束

进程已结束,退出代码为 0

测试结果2:

请输入第一个整数10 请输入第二个整数25 结果为: 0.4 程序结束

进程已结束,退出代码为 0

测试结果3:

请输入第一个整数10 请输入第二个整数0 对不起,除数不允许为0 程序结束

进程已结束,退出代码为 0

3.2 try……except……else

测试代码:

try:
a=int(input('请输入第一个整数'))
b=int(input('请输入第二个整数'))
result=a/b

except BaseException:
print('出错了')

else:
print('结果为:',result)
print('程序结束')

测试结果1:

请输入第一个整数1 请输入第二个整数0 出错了 程序结束

进程已结束,退出代码为 0

测试结果2:

请输入第一个整数a 出错了 程序结束

进程已结束,退出代码为 0

测试结果3:

请输入第一个整数1 请输入第二个整数2 结果为: 0.5 程序结束

进程已结束,退出代码为 0

3.3 try……except……else……finally

测试代码:

try:
a=int(input('请输入第一个整数'))
b=int(input('请输入第二个整数'))
result=a/b

except BaseException:
print('出错了')

else:
print('结果为:',result)

finally:
print('无论是否产生异常,总会被执行的代码')

print('程序结束')

测试结果:

请输入第一个整数25 请输入第二个整数0 出错了 无论是否产生异常,总会被执行的代码 程序结束

进程已结束,退出代码为 0

3.4 总结

try: <语句> #运行别的代码 except <名字name>: <语句> #如果在try部份引发了'name'异常 else: <语句> #如果没有异常发生 finally: <语句> #无论是否产生异常,总会被执行的代码

4 常见异常

  • ZeroDivisionError 不能除0
  • IndexError 数据中没有此索引
  • KeyError 映射中没有这个键
  • NameError 没有声明
  • SyntaError 语法错误
  • ValueError 传入无效的参数

5 traceback模块

该模块提供了一个标准接口,用于提取,格式和打印Python程序的堆栈痕迹。 它完全模仿了Python解释器在打印堆栈跟踪时的行为。 当您想在程序控制下打印堆栈迹线时,这非常有用,例如在解释器周围的“包装器”中。

在日常开发中,我们会做一些基本的异常处理,但是有时候只能打印我们处理的结果或者将异常打印出来,不能直观的知道在哪个文件中的哪一行出错。traceback模块就是为了解决这个问题出现的。

测试代码:

import traceback
try:
print('-----------')
print(1/0)
except:
traceback.print_exc()

测试结果:

Traceback (most recent call last): File "E:\pythonProject\Python_YSJ\chap11\​ ​test.py​​​", line 7, in <module> print(1/0) ZeroDivisionError: division by zero
进程已结束,退出代码为 0


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK