什么是异常?
异常是在程序执行过程中发生的,影响程序的正常运行
常见的语法错误
使用try…except进行异常处理
我们把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定异常,则默认处理所有的异常。每一个try,都必须至少有一个except。
try:
被检测的代码块
except 异常类型:
一旦检测到异常,则执行这个位置的语句
万能异常Exception
s1 = 'hello'
try:
int(s1)
except Exception:
print(e)
多分支情况
try:
int(s1)
except IndexError as e:
<语句1>
except KeyError as e:
<语句2>
except ValueError as e:
<语句3>
except Exception as err: #err可以明确报错的原因
print('---->',err) #放在最后面,异常的判断顺序从上往下
异常的其他结构try…finally
文件操作和数据库操作时,无论是否报错,都要执行.close()操作,将其放入finally语句中。
try:
return 1
except:
return 2
finally:
return 3 #无论是否异常都会执行这里的代码
#这里会返回3,直接覆盖前面return的值,前面的return不会直接返回,需要执行完finally才结束
try…else
try:
有可能有异常的代码
except 异常类型:
pass
..
else:
如果try中没有发生异常则进入的代码
#注意:如果使用else则在tr代码中不能出现return
异常抛出raise
我们可以使用raise自己触发异常,语法格式如下:
raise [Exception [, args [, traceback]]]
语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
def register():
username = input('输入用户名:')
if len(username)<6:
raise Exception('用户名长度必须6位以上')
else:
print('输入的用户名是:'username)
try:
register()
except Exception as err:
print(err)
else:
print('注册成功')
采用traceback模块查看异常
import traceback
try:
1/0
except Exception as e:
traceback.print_exc() #可以直接追溯到出错点