详细可以见官网:https://docs.python.org/zh-cn/3/tutorial/errors.html
语法:
try:
可能出现异常的代码
except:
出现异常后要执行的操作
else:
不出现异常时执行的操作
finally:
无论是否出现异常都必须要执行的操作
如:默认捕获所有异常
tr:
print('try即将执行...')
# 注意 5/ 0 是错误语句
a = 5 / 0
except: #默认捕获所有异常
print('try语句出现异常啦')
else:
print('没有异常时输入该语句')
finally:
print('finally')
就是说 你只想捕获某指定异常,其余异常运行错误。
如定义捕获上面的除数为0异常,如果不是该异常 则报错:
try:
print('try即将执行...')
# a = 5 / 0 #除数为0
c = 5 / int('abc') #int转换类型作物
#except: #默认捕获所有异常
except ValueError:
print('try语句出现异常啦')
else:
print('没有异常时输入该语句')
finally:
print('finally')
如 只捕获输出上面的 值报错(ValueError),正确输出
try:
print('try即将执行...')
# a = 5 / 0 #除数为0
c = 5 / int('abc') #int转换类型作物
#except: #默认捕获所有异常
except ValueError:
print('try语句出现异常啦')
else:
print('没有异常时输入该语句')
finally:
print('finally')
如果这时候 不是值类型报错,就会执行报错了。
try:
print('try即将执行...')
# a = 5 / 0 #除数为0
c = 5 / int('abc') #int转换类型作物
#except: #默认捕获所有异常
except (ZeroDivisionError,ValueError):# 指定2个类型
print('try语句出现异常啦')
else:
print('没有异常时输入该语句')
finally:
print('finally')
如:值错误
#b = 6/0
d = 6/int('a')
try:
print('try即将执行...')
a = 5 / 0 #除数为0
# c = 5 / int('abc') #int转换类型作物
#except: #默认捕获所有异常
except ZeroDivisionError:
print('try语句出现异常啦')
else:
print('没有异常时输入该语句')
finally:
print('finally')
try:
print('try即将执行...')
# a = 5 / 0 #除数为0
c = 5 / int('abc') #int转换类型作物
#except: #默认捕获所有异常
except ValueError as e: # 捕获ValueError异常,并获取到异常对象,e是自定义名称
print('try语句出现异常啦')
print('异常类型为:',e) #输出异常类型
else:
print('没有异常时输入该语句')
finally:
print('finally')
可以见官网:https://docs.python.org/zh-cn/3/tutorial/errors.html
这里简单做一个实验。
先class 自定义一个异常
然后在函数中用 raise 调用即可。
# 自定义异常,继承自Exception(exception类是所有异常类的父类)
class Usernameonoroff(Exception):
pass
def fn(username):
if username == 'admin' or username == 'ccx' :
# 使用 raise 抛出异常
raise Usernameonoroff('用户名已存在')
else:
print('这儿放不存在后的代码快,如 创建之类的。。。')
# 调用fn 函数
fn(input('请输入用户名:'))
print('*'*50)
fn(input('请输入用户名:'))