- 拼写错误, 即关键字、函数名或变量名拼写错误;关键字拼写错误时会提示SytaxError,而变量名、函数名拼写错误会提示NameError;
- 程序不符合Python的语法规范,缺少括号、冒号、表达式错误等等;
- 缩进错误,一般来说Python以4个空格为缩进;
异常是Python程序在运行中引发的错误。如果程序中发生了未进行处理的异常,脚本就会由于异常而终止运行;只有捕获这些异常,并进行相关处理,才能使程序不会中断运行;
python中使用try方法处理异常,一般的try语句基本形式如下:
try:
<语句(块)> # 可能产生异常的语句(块)
except <异常名1>: # 要处理的异常
<语句(块)> # 异常处理语句
except <异常名2>:
<语句(块)>
else:
<语句(块)> # 未触发异常则执行该语句(块)
finally:
<语句(块)> # 始终执行该语句
常用的形式有如下两种形式:
形式一:
try:
<语句(块)> # 可能产生异常的语句(块)
except <异常名1>: # 要处理的异常
<语句(块)> # 异常处理语句
形式二:
try:
<语句(块)> # 可能产生异常的语句(块)
except <异常名1>: # 要处理的异常
<语句(块)> # 异常处理语句
finally:
<语句(块)> # 始终执行该语句
try方法处理异常示例:
def tryFunction(n):
lst = [1, 2, 3, 4, 5]
try:
a = lst[n]
except IndexError:
return 'Index Error'
else:
return a
print(tryFunction(2))
print(tryFunction(12))
运行结果:
3
Index Error
在交互环境中,使用dir(__builtins__)命令,就会显示出所有的预定义异常;
常见的异常定义如下表所示:
异常名 | 描述 |
---|---|
AttributeError | 调用不存在的方法引起异常 |
EOFError | 遇到文件默尾引发的异常 |
ImportError | 导入模块出错引发的异常 |
IndexError | 列表越界引发的异常 |
IOError | I/O操作引发的异常,如打开文件出错 |
KeyError | 使用字典不存在的关键字引发的异常 |
NameError | 使用不存在的变量名引发的异常 |
TabError | 语句块缩进不正确引发的异常 |
ValueError | 搜索列表中不存在的值引发的异常 |
ZeroDivisionError | 除数为0引发的异常 |
except语句主要用法有一下几种:
- except: 捕获所有的异常;
- except<异常名>:捕获指定异常;
- except(异常名1,异常名2): 捕获异常1或异常2;
- except<异常名> as <数据>: 捕获指定异常及其附加数据;
- except(异常名1,异常名2) as <数据> : 捕获异常1或异常2及其附加数据
except示例:
def testExcept(index, i):
lst = [1, 2, 3, 4, 5]
try:
result = lst[index] / i
except:
print('Error!')
else:
print('The Result Is', result)
testExcept(2, 2)
testExcept(2, 0)
testExcept(12, 0)
运行结果:
The Result Is 1.5
Error!
Error!
使用raise抛出异常的方式有如下几种:
- raise 异常名
- raise 异常名,附加数据
- raise 列明
raise抛出异常示例:
def testExcept(index, i):
lst = [1, 2, 3, 4, 5]
if len(lst) <= index:
raise IndexError
else:
print('The Result Is', lst[index])
'''
except IndexError:
print('Index Error!')
else:
print('The Result Is', result)
'''
#testExcept(2, 2)
testExcept(5, 2)
运行结果:
Traceback (most recent call last):
File “G:\work\python\01Python爬虫基础\postTest.py”, line 33, in
testExcept(5, 2)
File “G:\work\python\01Python爬虫基础\postTest.py”, line 21, in testExcept
raise IndexError
IndexError
处理raise手工抛出的异常示例:
def testExcept(index, i):
lst = [1, 2, 3, 4, 5]
try:
if len(lst) <= index:
raise IndexError
except IndexError:
print('Index Error!')
else:
print('The Result Is', lst[index])
testExcept(2, 2)
testExcept(5, 2)
运行结果:
The Result Is 3
Index Error!
assert语句的一般形式如下:
assert<条件测试>,<异常附加数据>
- 其中异常附加数据是可选的,当测试条件为False时,引发异常;
- assert会抛出AssertionError异常;
- 只有python的内置特殊变量__debug__为True时才运行
assert语句示例:
def testAssert(i):
try:
assert i < 2 # 当 i >= 2时抛出异常AssertionError
except AssertionError:
print('Assertion Error!')
else:
print('i is', i)
testAssert(1)
testAssert(2)
运行结果:
i is 1
Assertion Error!
- Python中的自定义异常至于要继承Exception类
- 如果需要在异常中含有一定的提示信息,可以重载__init__和__str__函数
自定义异常示例:
class MyException(Exception):
def __init__(self, value):
self.value = value;
def __str__(self):
return self.value
raise MyException('Myself Exception!')
运行结果:
Traceback (most recent call last):
File “G:\work\python\01Python爬虫基础\postTest.py”, line 24, in
raise MyException(‘Myself Exception!’)
__main__.MyException: Myself Exception!