1. 常见错误类型
本质上看,所有的错误都属于一个类,所有的错误的基类是BaseException 。
1.1 语法错误
语法错误(SyntaxError):Python程序代码不符合Python语言的语法会导致语法错误。 示例如下。
score=90.5
if score < 60
print('不及格!')
以上代码因为if语句缺少了: 所以会报语法错误。
SyntaxError: invalid syntax
常见的语法错误有:
- 不正确的缩进;
- 关键字遗漏或者拼错;
- 漏掉符号,如冒号、逗号或括号等;
- 语法上需要的地方缺少了语句。
1.2 除0错误
除0错误(ZeroDivisionError):0 不能作为除数,当0 作为除数时,会报错。 示例如下。
10*(1/0)
因为以上代码将0 作为了除数,因此会报错。
ZeroDivisionError: division by zero
1.3 名字错误
名字错误(NameError):试图访问的变量名不存在。 示例如下。
if score > 60:
print('恭喜你,及格了!')
因为以上代码中score 变量并未声明并赋值,因此无法进行 if 语句的判断,所以会报错。
1.4 类型错误
类型错误(TypeError):当使用的变量的类型不符合要求时会报错。 示例如下。
age=18
string='张三'
print(age+string)
因为age是整型,string是字符串型,二者无法进行相加,因此会报错。
TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’
1.5 属性错误
属性错误(AttributeError):特性引用和赋值失败时会引发属性错误。
tuple=(1,2,3)
tuple.append(7)
print(tuple)
因为tuple属于元组,而元组没有append() 这一属性方法,因此会报错。
1.6 输入输出错误
输入输出错误(IOError):无法打开指定文件。 在Python3中,IOError细分出了很多子错误,例如:FileNotFoundError等。
2. 异常处理
2.1 异常捕获
捕获异常的基本形式是:
try…except…
将可能引起异常的代码放在try 子句中,如果try 子句完成后发生了异常,则except 子句会处理出现的异常。 except 子句中可以捕获特定类型的异常。形式如下。
try:
pass
except 异常类型 as 自定义名称:
pass
当不知道要捕获哪些异常类时,可以使用BaseException 这个基类来代替。通常情况下,也可以用Exception 代替BaseException 。
2.2 异常清理
在最后的except 子句后面添加一个else 子句,当没有异常发生时,会自动执行else 子句。可以理解为奖励机制。
与else 子句不同的是,finally 子句无论有没有出现异常都会被执行。
2.3 异常触发
- 使用raise抛出异常。
示例如下。
try:
score = int(input("请输入您的分数:"))
if score<0:
raise ValueError('出现了值异常错误!')
except ValueError as e:
print(e)
程序在接收到一个为负的值时会抛出错误。
- 使用自定义异常类来抛出错误。 自定义异常类需要由Exception类或paihenglei派生。
示例如下。
class MyError(Exception):
def __init__(self,value):
self.value=value
try:
raise MyError('我自己定义的异常!')
except MyError as e:
print(e)
3. 调试程序
这里介绍断言(assert)的用法。
断言用于判断一个表达式的值是否为True,如果为False,则assert语句本身会抛出AssertionError。 可以在断言的后面用逗号,跟一个表达式,如果断言失败(返回值为False),则输出这个表达式。
语法:
assert (condition),(error_message)
示例如下。
assert 1+2==2,'1+2=2不成立'
以上程序断言失败,输出如下。
AssertionError: 1+2=2不成立
|