第12次预习课-20180912 异常
异常:
程序执行的时候,出现了错误。
出现了异常,程序报错,然后中断执行
异常和程序错误,完全等价么?
异常是程序错误的一种
小练习:
想办法尽可能抛出异常
NameError: name 'abc' is not defined
ZeroDivisionError: division by zero
IndexError: list index out of range
SyntaxError: Missing parentheses in call to 'print'. Did you mean
SyntaxError: invalid character in identifier
TypeError: unsupported operand type(s) for +: 'int' and 'str'
ValueError: invalid literal for int() with base 10: 'a'
AttributeError: 'tuple' object has no attribute 'append
IndentationError: expected an indented block
FileNotFoundError: [Errno 2] No such file or directory: 'fasdfasfadf'
TypeError: 'int' object is not subscriptable
异常出现不是好事,尤其在上线的程序里面。
服务器端来说,出现了未捕获的异常,服务器进程就完蛋了。
或者是app crash
如果是服务器端的进程死了,我们会有另外一个进程把它重启。
定时任务:
1)Linux crontab,
2)程序可以实现,sleep一定的时间死循环就行。
在线监控:
日志:访问日志,错误日志(程序的异常信息)
异常信息会有堆栈 java
微软的程序:50%都是错误处理的代码
try:
1/0 #出现错误了
print(“hello”)
except:
print("error occur")
print("done")
在try里面,如果有出错,那么其他的try都不会执行
try:
1/0 #出现错误了
print(“hello”)
except TypeError:
print("error occur")
异常只会被拦截一次,拦截后后面的except都不会被执行
程序也会在执行except语句后,跳出 try…except…
继续执行后续的代码
小练习:
请输入2个数字,相加,打印结果(不管用户输入什么,程序不能崩溃)
while 1:
try:
a = float(input("请输入数据a:"))
break
except:
print("输入的数据不是数字类型,请重新输入。")
while 1:
try:
b = float(input("请输入数据b:"))
break
except:
print("输入的数据不是数字类型,请重新输入。")
print(a+b)
try:
可能出错的代码块
except xxx异常:
当异常出现时候的处理代码
except xxx异常:
当异常出现时候的处理代码
except:
当异常出现时候的处理代码
举例子:
try:
1/0
except TypeError:
print ("TypeError occur!")
except ValueError:
print ("ValueError occur!")
except:
print ("Unknown error occur!")
try:
1/0
except TypeError:
print ("TypeError occur!")
except ValueError:
print ("ValueError occur!")
except Exception as e:
print (e)
捕获异常之后,不会显示报错
def func1():
1/0
def func2():
func1()
func2()
import traceback
def func1():
1/0
def func2():
func1()
try:
func2()
except Exception as e:
#print(traceback.format_exc())#返回字符串,print_exc()则直接给打印出来
traceback.print_exc()
print ("Done!")
import traceback
def func1():
if 1==1:
raise ZeroDivisionError
def func2():
func1()
try:
func2()
except:
#print(traceback.format_exc())#返回字符串,print_exc()则直接给打印出来
traceback.print_exc()
print ("Done!")
>>> import os
>>> os.getcwd()
>>> os.listdir()
>>> os.chdir("d:")
Import os.path
os.path.isdir()
os.path.isfile()
小练习:
统计一下,当前目录下文件数量总和(只有一级目录)
import os
import os.path
os.chdir("d:")
list1 = os.listdir()
list2=[]
list3=[]
for i in list1:
if os.path.isdir(i):
list2.append(i)
if os.path.isfile(i):
list3.append(i)
print("目录个数",len(list2))
print("文件个数",len(list3))
>>> os.mkdir("d:\\test") #创建一个目录
小练习:建立一个10级的目录: pic1-pic10
import os
root_dir = "e:\\pic"
os.chdir("e:\\pic")
for i in range(1,11):
os.mkdir("pic"+str(i))
os.chdir("pic"+str(i))
创建多级目录:
import os
os.makedirs("D:\\pic1\\test\\1")