a
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘a’ is not defined
当异常出现的时候,且没有做任何处理,程序不会继续执行,也就是说程序被中断了。
异常的出现是不好的,未处理异常会中断,程序就退出。
服务器端程序,出现异常没有捕获,程序就中断了。服务器死掉了,网页就会500。
会显示出错的代码行号
异常类型:加具体的信息说明
养成习惯:
1. 程序出错。例1/0,变量没定义
2. 用户输入的数据问题
3. 运行中,性能问题,内存泄漏,句柄泄漏
try:
result = 1/0
print(“ok”)
except:
print(“出现了一些问题”)
print(“Done!”)
使用try except写一个异常处理的例子。拦截不同的异常,并给出具体的错误信息
try:
s
result = 1/0
print(“ok”)
except ZeroDivisionError:
print(“出现除0操作了!”)
except NameError:
print(“变量没定义!”)
print(“Done!”)
#try里面的代码产生的多个异常,只会有要I 个被抛出
#异常信息,只会被拦截一次
例:
def div(a,b):
if not(isinstance(a,(int,float))and \isinstance(b,(int,float)):
print(“不全是数字”)
try:
result = a/b
except TypeError:
print(“出现了类型不匹配的情况”)
except ZeroDivsionError:
print(“被除数为零的异常出现了”)
print(div(2,1))
print(div(1,“x”))
print(div(1,0))
堆栈信息
def a():
print(“a”)
b()
def b():
print(“a”)
c()
def c():
print(“a”)
d()
def d():
print(“1/0”)
a()
import json
d={1:‘a’}
s=json.dumps{d} #将字典转换成json串
print(s)
d=json.loads(s) #将json串转换回字典
print(type(d))
import json
d=‘xxxxxxx’
try:
d=json.load(d)
except:
print(“不是一个合格的json串类型”)
import json
try:
1/0 # 可能出现的各种错误
except ZeroDivisionError:
print(“除0的错误出现了”)
except: # except必须在最后
print(“有位置错误”)
打印错误信息:except Error as e:
import json
try:
1/0
except ZeroDivisionError as e:
print(“除0的错误出现了”)
print(e) #没有错误行号和堆栈信息
print(traceback.print_exc()) #调用的堆栈信息显示
except:
print(“有位置错误”)
print(“ok!”)
当没有出现任何异常的时候执行else,例:
try:
1/1
except ZeroDivisionError as e:
print(“除0的错误出现了”)
print(e)
except:
print(“有位置错误”)
print(“ok!”)
else:
print(“没有出现错误”)
总结:else在try执行完所有内部的代码后,没有异常的情况下才会被执行。有异常,则不会被执行。
例如:
try:
1/1
except ZeroDivisionError as e:
print(“除0的错误出现了”)
print(e)
except:
print(“有位置错误”)
print(“ok!”)
else:
print(“没有出现错误”)
finally:
print(“无论如何我都会被执行”)
总结:finally一般会使用在数据库连接中,最后都会释放一下最后的资源。
例如:
try:
raise NameError
except ZeroDivisionError as e:
print(“除0的错误出现了”)
print(e)
except NameError:
print(“Nameerror异常”)
else:
print(“没有出现错误”)
finally:
print(“无论如何我都会被执行”)
场景:程序符合语法,但是不符合业务规则,所以要抛出异常。让其他程序再去做处理。
try:
1/1
try:
1/0
except:
raise
except:
print(“未知错误”)
变量没有被定义,Python里若定义一个变量只有赋值。例如:
a=1
print(a)
1
所以遇到这个报错,第一反应是没有赋值,二是变量名打错了
索引错误,第一反应索引值超出了范围,看一下列表长度是多少。例如:
a=list(range(5))
a
[1,2,3,4,5]
A[10]
第二是改小index的值
Xxx对象不能被调用。例如:
list=1
list(“abc”)
Traceback (most recent call last):
File “”, line 1, in
TypeError: ‘int’ object is not callable
出错原因:把保留字当成了一个变量,保留字不能作为变量
没有加引号,例如:
ord(0)
Traceback (most recent call last):
File “”, line 1, in
TypeError: ord() expected string of length 1, but int found
越界
s=“gloryroad is good!”
len(s)
18s[20]
File “”, line 1, in
IndexError: string index out of range
非函数类型,当函数调用了
10()
Traceback (most recent call last):
File “”, line 1, in
TypeError: ‘int’ object is not callable