使用python编程的时候难免会出现各种各样的错误,这些错误会使程序中断。
使用python编程的时候难免会出现各种各样的错误,这些错误会使程序中断。好在python解释器会告诉你错误发生在什么位置以及错误产生的原因,便于我们进行修改和调试。有时候我们并不希望这种错误中断程序的运行,于是通过异常处理能够忽略本次异常让程序继续运行下去。
python中会发生两种类型的错误。
1、语法错误:如果未遵循正确的语言语法,则会引发语法错误。
2、逻辑错误(异常):在运行时中,通过语法测试后发生错误的情况称为异常或逻辑类型。
一、语法错误
string = 'Hello Word'
if string == 'Hello'
print('是Hello')
运行结果:
File "D:/python/lianxi/add.py", line 15
if string == 'Hello'
^
SyntaxError: invalid syntax
它就返回了语法错误的信息,用小箭头告诉我们,if语句后面少了一个:(冒号)。
二、逻辑错误(异常)
shu = 10
result = shu / 0
print(resule)
运行结果:
Traceback (most recent call last):
File "D:/python/lianxi/add.py", line 15, in <module>
result = shu / 0
ZeroDivisionError: division by zero
抛出一个ZeroDivisionError异常,叫处理异常。
三、异常处理
我们可以通过使用 try..except 来处理异常状况。一般来说我们会把通常的语句放在 try 代码块中,将我们的错误处理器代码放置在 except 代码块中。
try: # 尝试运行以下代码
result = 5 / 2
print(result)
except: # 捕获到异常执行以下代码
print('程序异常')
运行结果:
2.5
如果我们故意写错,看是怎么样的:
try: # 尝试运行以下代码
result = 5 / 0
print(result)
except: # 捕获到异常执行以下代码
print('程序异常')
运行结果:
程序异常
通过上面可以看到,如果没有出现异常,它只运行try下的代码;出现异常,它就运行了except下面的代码。
如果知道它报的的是ZeroDivisionError异常的话,那可以这样写:
try:
x = 5 / 0
print(x)
except ZeroDivisionError: # 捕获到ZeroDivisionError的话,执行下面的代码
print('不能除零')
except: # 如果是出现其它错误的话,那就执行这里的代码
print('其它错误')
运行结果:
不能除零
如果想看捕获的异常详细信息,可以这样:
try:
x = 5 / 0
print(x)
except ZeroDivisionError as ze: # 捕获到ZeroDivisionError的话,执行下面的代码
print('出现异常',ze)
运行结果:
出现异常 division by zero
四、try...else语句
try:
x = 5 / 2
print(x)
except ZeroDivisionError: # 捕获到ZeroDivisionError的话,执行下面的代码
print('不能除零')
except: # 如果是出现其它错误的话,那就执行这里的代码
print('其它错误')
else: # 如果try执行没有出现异常的话,就再执行else中的代码
print('没有异常')
运行结果:
2.5
没有异常
else语句是在try语句中的代码没有任何异常的情况下,再执行else语句下的代码。
五、try...finally语句
f = open('data.txt')
try:
print(f.read())
except:
print('文件操作遇到错误!') # 这个时候文件始终是打开的,可能后面再读取的时候就会遇到错误,这种情况下我们就适合用finally
finally: # 不管上面有没有出现异常,都要执行finally下的代码
f.close()
运行结果:
文件操作遇到错误!
finally语句就是不管上面有没有异常,都要执行finally语句下的代码,通常是做一些必须要释放的资源的代码,最典型的就是文件操作和数据库操作。
六、抛出异常
def method():
raise NotImplementedError('该方法代码还未实现')
# 设定这个函数在这,留个位置,要你写入代码,但是可能你没写进去,那就设定默认的报错
method()
运行结果:
Traceback (most recent call last):
File "D:/python/lianxi/add.py", line 17, in <module>
method()
File "D:/python/lianxi/add.py", line 15, in method
raise NotImplementedError('该方法代码还未实现')
NotImplementedError: 该方法代码还未实现
raise语句是抛出一个指定的异常。