第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")

 

posted @ 2018-09-13 16:58  feifei_tian  阅读(101)  评论(0编辑  收藏  举报