is 与 ==
==
看代码,
list1 = [1,2,3]
list2 = [1,2,3]
if list1 == list2:
print("list1和list2相等")
else:
print("list1和list2不相等")
结果:
list1和list2相等
list1 = [1,2,3]
list2 = list1
if list1 == list2:
print("list1和list2相等")
else:
print("list1和list2不相等")
结果:
list1和list2相等
list1 = [1,2,3]
list2 = [1]
if list1 == list2:
print("list1和list2相等")
else:
print("list1和list2不相等")
结果:
list1和list2不相等
在Python中变量的名字存储的是变量的内存地址,变量之间的赋值是内存地址之间的传递。 再结合以上三个例子不难总结出: ==比较的是两侧数据的值是否相等
is
list1 = [1,2,3]
list2 = list1
print(id(list1),id(list2))
if list1 == list2:
print("list1和list2相等")
else:
print("list1和list2不相等")
list2.append(4)
print(id(list1),id(list2))
if list1 == list2:
print("list1和list2相等")
else:
print("list1和list2不相等")
结果:
24088528 24088528
list1和list2相等
24088528 24088528
list1和list2相等
结合以上例子不难总结出: is比较的是两侧数据的内存地值是否相等。
一般来说比较两个变量是否相等都是用==,判断某个变量的值是否为None用is。
异常
当代码执行发生错误的时候解释器就会捕获这个错误(异常),然后由Python解释器对这个异常进行处理,程序也就运行到这个地方终止了。看下面的例子:
f = open("1.txt","r")
content = f.read()
print(content)
f.close()
异常:
Traceback (most recent call last):
File "E:/C程序/py_pro/1/异常.py", line 1, in <module>
f = open("1.txt","r")
FileNotFoundError: [Errno 2] No such file or directory: '1.txt'
在开发的过程中我们总能发现一些潜在的异常,就像上面的代码似的,因此我们要尽可能的处理这个异常。处理异常有两个目的:(1)、为了使异常之后的代码还能执行(2)、得到异常的详细信息。
处理异常:try...except:
try:
f = open("1.txt", "r")
content = f.read()
print(content)
f.close()
except:
print("以上代码出现异常,正在处理.....")
print("\n\n程序over!")
结果:
以上代码出现异常,正在处理.....
程序over!
把可能出现异常的代码块写在try中,然后在except中做详细的处理。
异常分类
异常有很多种,例如:NameError、FileNotFindError、IndentError等,如果我们就像上面例子中的except的形式写,那么整个try语句块中的出现的所有类型异常都会按那一种处理形式处理,并且无法获取的到异常的详细信息。因此我们必须做一些细致的处理。
在Python中所有异常类的父类是Exception,Exception还有一个父类是BaseException。在except后面可以根据异常的类型做具体的处理。
try:
print(a)
f = open("1.txt", "r")
content = f.read()
print(content)
f.close()
except NameError as error:
print("error:%s" % error)
except FileNotFoundError as error:
print("error:%s" % error)
except:
print("未知类型错误")
print("\n\n程序over!")
结果:
error:name 'a' is not defined
程序over!
else和 finally:
try:
print(a)
f = open("1.txt", "r")
content = f.read()
print(content)
f.close()
except NameError as error:
print("error:%s" % error)
except FileNotFoundError as error:
print("error:%s" % error)
except:
print("未知类型错误")
else:
print("没有异常")
finally:
print("无论有无异常都会执行")
print("\n\n程序over!")
结果:
error:name 'a' is not defined
无论有无异常都会执行
程序over!
try后面必须要跟一个except或者finally,else可跟可不跟。