Python的学习调试之路一般是这样的:
- 新手:把报错内容贴在QQ技术群或者贴吧里向技术大佬求助
- 初入门:了解了Python的常见的报错异常分类:如ValueError、SyntaxError、IntentError等,并会根据这些异常,在代码中添加print()方法来搞明白报错原因
- 中级开发人员:不仅了解上面的各种异常Error和Exception,还能根据报错堆栈准备定位报错位置及原因
- 高级开发人员:除了可以解决以上常见的问题,还会利用IDE本身的调试工具或者Python的pdb来排查疑难杂症。
实例分析如何做程序调试:
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- score = int(input('输入分数:\n'))
- if score >= 90:
- grade = 'A'
- elif score >= 60:
- grade = 'B'
- else:
- grade = 'C'
- print('%d 属于 %s' % (score,grade))
上面的程序,如果输入的是数字是没有问题的,比如:
- ➜ lezhi.io python3 score.py
- 输入分数:
- 100
- 100 属于 A
假如我们随便输入一些字符呢?
- ➜ lezhi.io python3 score.py
- 输入分数:
- adjfkd
- Traceback (most recent call last):
- File "score.py", line 4, in
- score = int(input('输入分数:\n'))
- ValueError: invalid literal for int() with base 10: 'adjfkd'
初学Python的人可能觉得无从下手,只得把报错贴在网上寻求帮忙。 下面我说下这种情况下的办法:
- 一般报错的最下面是报错的主要错误类型:ValueError也就是值类型错误,官方文档是这样定义的:当操作或函数接收到具有正确类型但值不适合的参数,并且情况不能用更精确的异常例如IndexError来描述时将被引发
- 然后后面是具体的描述,是帮我们定位具体原因的关键,上面的意思是:”当使用int()来做类型转换时发生错误”,很明显, “adjfkd”不能直接转换成数字。
- 再接着向上看, 会显示报错的代码和行数
- 根据此,我们知道了问题所在,就可以着手做修复工作,以下为修复示例:
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- import sys
- try:
- score = int(input('输入分数:\n'))
- except ValueError as ex:
- print("请输入一个有效的数字")
- sys.exit(-1)
- if score >= 90:
- grade = 'A'
- elif score >= 60:
- grade = 'B'
- else:
- grade = 'C'
- print('%d 属于 %s' % (score,grade))
本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/2018410.html