常见异常:http://mrw.so/6aJlZB
Debug就是排除错误的过程。比如运行下面代码,我们看报错
a = input('请输入密码:')
if a == '123456'
print('通过')
报错信息会告诉你第几行, ^符号代表出错的位置,这里代表末尾,invalid syntax是语法错误。
另外还有就是知识点记得不牢靠。比如字典里的索引是从0开始的,想取第一个数值,就是print(list[0])
还有一种就是思路不清晰,所以写代码时候要多用注释#,记录每一步的操作。另外就是用print()函数,当你写的代码总是不对,又弄不明白哪里不对的时候,使用#号把后面的代码注释掉,一步一步运行,可以帮助排除错误。
最后一种就是被动进坑。
#你可以输入1试试。
age = input('你今年几岁了?')
print(age)
print(type(age))
如果报错该如何做呢?我们要就告诉系统报错的情况下该做什么。可以使用 try…except…
try except
当程序发生不同的意外情况时,会对应特定的异常类型,Python 解释器会根据该异常类型选择对应的 except 块来处理该异常。
try except 语句的执行流程如下:
**
首先执行 try 中的代码块,如果执行过程中出现异常,系统会自动生成一个异常类型,并将该异常提交给 Python 解释器,此过程称为捕获异常。
当 Python 解释器收到异常对象时,会寻找能处理该异常对象的 except 块,如果找到合适的 except 块,则把该异常对象交给该 except 块处理,这个过程被称为处理异常。
如果 Python 解释器找不到处理异常的 except 块,则程序运行终止,Python 解释器也将退出。
try:
a = int(input("输入被除数:"))
b = int(input("输入除数:"))
c = a / b
print("您输入的两个数相除的结果是:", c )
except (ValueError, ArithmeticError):
print("程序发生了数字格式异常、算术异常之一")
except :
print("未知异常")
print("程序继续运行")
上面程序中,第 6 行代码使用了(ValueError, ArithmeticError)来指定所捕获的异常类型,这就表明该 except 块可以同时捕获这 2 种类型的异常;第 8 行代码只有 except 关键字,并未指定具体要捕获的异常类型,这种省略异常类的 except 语句也是合法的,它表示可捕获所有类型的异常,一般会作为异常捕获的最后一个 except 块。
获取特定异常的有关信息:
我们已经可以捕获程序中可能发生的异常,并对其进行处理。但是,由于一个 except 可以同时处理多个异常,那么我们如何知道当前处理的到底是哪种异常呢?
其实,每种异常类型都提供了如下几个属性和方法,通过调用它们,就可以获取当前处理异常类型的相关信息:
- args:返回异常的错误编号和描述字符串;
- str(e):返回异常信息,但不包括异常信息的类型;
- repr(e):返回较全的异常信息,包括异常信息的类型。
try:
1/0
except Exception as e:
# 访问异常的错误编号和详细信息
print(e.args)
print(str(e))
print(repr(e))
# 运行结果如下:
'''
('division by zero',)
division by zero
ZeroDivisionError('division by zero')
'''
拓展知识链接:http://c.biancheng.net/view/4599.html
# 提示:需要用到try……except……语句,以及while语句和break语句。
try:
age = int(input('你今年几岁了?'))
#ValueError是异常名称
except ValueError:
print('要输入整数哦')
if age < 18:
print('不可以喝酒噢')
更多报错类型查看:https://www.runoob.com/python/python-exceptions.html