第九章:程序异常
异常:程序执行的时候,出现了错误
出现了异常,程序报错,然后中断执行。
异常是程序错误的一种。
常见的异常报错:
NameError: name ‘a’ is not defined
出现异常不是好事,尤其是在上线的程序里面。
尤其是对于服务器端来说,出现了未铺货的异常,服务器进程完蛋了。
定时任务:linux:crontab
异常信息:会有堆栈
try:
1/0
print("hello")
print("hello")
except TypeError:
print("error occur!")
except ZeroDivisionError:
print("ZeroDivisionError occur")
print("done!")
try:
int("a")
print("hello")
print("hello")
except ValueError:
print("Value error!")
except ZeroDivisionError:
print("ZeroDivisionError occur")
print("done!")
异常只会被拦截一次,拦截后,后面的except都不会被执行了,成灰会在except语句后,跳出try、、、except、、、
后继续执行后续的代码。
练习题:请输入2个数字,相加,打印结果,(用户输入的数据不确定,但是程序不能奔溃),如果输入的不是数字,那么让用户在重新输入。
result = ""
while 1:
try:
a=float(input("请输入一个数字a:"))
break
except:
print("输入的不是数字类型,请重新输入")
while 1:
try:
b=float(input("请输入一个数字b:"))
break
except:
print("输入的不是数字类型,请重新输入")
result =a+b
print(result)
Try:
可能出错的代码块
Except XXX异常1:
当异常出现的时候的处理代码
Except:
当异常出现时候的处理代码
try:
1/0
except TypeError:
print("TypeError occor!")
except ValueError:
print("ValueError occur!")
except:
print("Unknown error occur!")
1、Except应该放在最后面
try:
1/0
except TypeError:
print("TypeError occor!")
except ValueError:
print("ValueError occur!")
except Exception as e:
print("e.message")
2、打印出现异常的原因
try:
1/0
except TypeError:
print("TypeError occor!")
except ValueError:
print("ValueError occur!")
except Exception as e:
print(e)
3、查看异常是什么(堆栈)
def func():
1/0
def func2():
func1()
func2()
Import traceback将程序异常的堆栈都打印出来了
import traceback
def func():
1/0
def func2():
func1()
try:
func2()
except Exception as e:
traceback.print_exc()
print("Done!")
4、 抛出异常
import traceback
def func1():
if 1==1:
raise ZeroDivisionError
def func2():
func1()
try:
func2()
except Exception as e:
traceback.print_exc()
print("Done!")
5、不建议使用如下结构
建议:针对每种可能出现的异常,正确的提示用户。
目录:
>>> import os
>>> os.getcwd()
'/Users/sunqianli'
>>> os.chdir("/Users/sunqianli")
>>> os.getcwd()
'/Users/sunqianli'
>>> os.chdir("/Users/sunqianli/Desktop")
>>> os.getcwd()
'/Users/sunqianli/Desktop'
>>> os.listdir()
6、当前目录下文件数量总和(只有一级目录)
import os
import os.path
file_count = 0
dir_count = 0
for i in os.listdir("/Users/sunqianli/Desktop"):
if os.path.isdir(i):
dir_count+=1
else:
file_count+=1
print(file_count)
print(dir_count)
>>> import os
>>> os.mkdir("/Users/sunqianli/Desktop/s1")
>>> os.chdir("/Users/sunqianli/Desktop/s1")
>>> os.getcwd()
'/Users/sunqianli/Desktop/s1'
>>> os.mkdir("s2")
>>> os.chdir("s2")
>>> os.mkdir("s3")
>>> os.listdir()
['s3']
7、程序建立一个10级的目录pic1到pic10
Root_dir = “e:\\pic”
Os.chdir(“e:\\pic”)
For I in range(1,11):
Os.mkdir(“pic”+str(i))
Os.chdir(“piic”+str(i))
8、创建多级目录:(目录要为空的)
Import os
Os.makedirs(“e:\\pic1\\test\\1”)