个人主页:丷从心
系列专栏:Python基础
学习指南:Python学习指南
print(num)
Traceback (most recent call last):
File "C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】异常/test.py", line 1, in <module>
print(num)
NameError: name 'num' is not defined
Python
中的对象,表示一个错误,当程序产生异常时,需要对异常进行捕获和处理,否则程序会终止运行try...except...
语句try:
可能会产生异常的代码, 如果产生异常, try 语句会对异常进行捕获
except 异常类型:
try 语句捕获到异常时, except 语句会对异常进行处理
print(1 / 0)
print('产生异常时, 程序在异常处终止, 无法运行到这里...')
Traceback (most recent call last):
File "C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】异常/test.py", line 1, in <module>
print(1 / 0)
ZeroDivisionError: division by zero
ZeroDivisionError
除零异常,如果没有对异常进行捕获和处理,那么整个程序就会终止,下面的代码无法被执行try:
print(1 / 0)
except ZeroDivisionError as e:
print(e)
print('除数不能为 0')
print('即使产生异常, 依然能够运行到这里...')
division by zero
除数不能为 0
即使产生异常, 依然能够运行到这里...
ZeroDivisionError
异常时,try
语句会对异常进行捕获,并跳转到except
语句,然后通过except
语句对异常进行处理,此时程序并不会因为异常而终止,能够正常执行下面的代码as
关键字用于将异常对象赋值给一个变量,可以使用变量e
打印异常信息或进行其他操作Python
中使用raise
关键字抛出异常,可以使用异常类或实例参数调用raise
语句抛出异常,使用异常类抛出异常时会自动创建一个实例raise Exception
Traceback (most recent call last):
File "C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】异常/test.py", line 1, in <module>
raise Exception
Exception
Exception
是所有异常类的基类,没有相关错误信息raise NameError('This is NameError')
Traceback (most recent call last):
File "C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】异常/test.py", line 1, in <module>
raise NameError('This is NameError')
NameError: This is NameError
raise
就可以再次将异常抛出try:
raise NameError('This is NameError')
except NameError:
print('产生了 NameError 异常')
raise
产生了 NameError 异常
Traceback (most recent call last):
File "C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】异常/test.py", line 2, in <module>
raise NameError('This is NameError')
NameError: This is NameError
print('产生了 NameError 异常')
后,异常被再次抛出else
语句else
语句中try:
可能会产生异常的代码, 如果产生异常, try 语句会对异常进行捕获
except 异常类型:
try 语句捕获到异常时, except 语句会对异常进行处理
else:
没有产生异常时, 需要执行的代码
try:
print(1 / 1)
except ZeroDivisionError as e:
print(e)
print('除数不能为 0')
else:
print('没有产生异常时, 会运行到这里...')
1.0
没有产生异常时会运行到这里...
finally
语句finally
语句中finally
不能单独使用,需要搭配try
语句使用try:
可能会产生异常的代码, 如果产生异常, try 语句会对异常进行捕获
except 异常类型:
try 语句捕获到异常时, except 语句会对异常进行处理
else:
没有产生异常时, 需要执行的代码
finally:
无论是否产生异常,都会执行的代码
try:
print(num)
except ZeroDivisionError as e:
print(e)
print('除数不能为 0')
else:
print('没有产生异常时, 会运行到这里...')
finally:
print('无论是否产生异常, 都会运行到这里...')
无论是否产生异常, 都会运行到这里...
Traceback (most recent call last):
File "C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】异常/test.py", line 2, in <module>
print(num)
NameError: name 'num' is not defined
print(num)
是NameError
异常,而没有定义对NameError
异常的处理,所以仍然会产生异常,在程序终止之前会执行finally
语句中的代码,之后程序才会终止try:
print(num)
except ZeroDivisionError as e:
print(e)
print('除数不能为 0')
except NameError as e:
print(e)
print('变量需要定义后再使用')
else:
print('没有产生异常时, 会运行到这里...')
finally:
print('无论是否产生异常, 都会运行到这里...')
name 'num' is not defined
变量需要定义后再使用
无论是否产生异常, 都会运行到这里...
finally
语句的作用finally
语句在关闭文件或数据库连接时非常有用,将分别在文件读写章节和数据库操纵章节进行介绍Exception
异常基类class PasswordError(Exception):
def __str__(self):
return '密码错误...'
def __repr__(self):
return '密码错误...'
name = input('请输入用户名: ')
password = input('请输入密码: ')
local_name = 'follow__my_heart'
local_password = 'admin'
try:
if name != local_name or password != local_password:
raise PasswordError
except PasswordError as e:
print(e)
else:
print('密码正确, 欢迎...')
请输入用户名: follow__my_heart
请输入密码: 123456
密码错误...
请输入用户名: follow__my_heart
请输入密码: admin
密码正确, 欢迎...