异常
异常捕获
ipt = input('请输入:')
num = int(ipt) # ValueError:以10为基数的int()的无效文字:'fs'
print(num)
f1 = float(ipt) # ValueError:无法将字符串转换为浮点数:'fs'
异常介绍:什么是异常
一般情况下,在python无法正常处理程序时就会发生一个异常。
所以异常是在程序执行过程中发生,并且会影响程序的执行
如果在python脚本发生异常时,我们不进行捕获处理该异常,程序则会终止。
prit('') # NameError:没有定义名称“prit”
a = 2
print(a)
异常处理:捕获异常
try-except语句用来检测try代码块中的错误i,让except语句捕获异常欣喜并且进行处理。以至于在异常发生时不会终止我们的程序。
try:
正常程序时。执行代码块
except:
抛出异常时,捕捉异常,且自动执行该代码块
try:
# 正常程序
ipt = input('请输入:')
num = int(ipt) # ValueError:以10为基数的int()的无效文字:'fs'
print(num) # 以10为基数的int()无效的文字:'1.5'
except Exception as e:
# 一旦有异常,执行except内部代码块
print(e)
num = 1
print(num)
try:
# li = [2,3]
# li[2] # IndexError 列表索引超出范围
a = 2
b = 0
c = a/b
print(c) # ZeroDivisionError: division by zero 除以零
except IndexError as e:
print(e)
except ZeroDivisionError as e:
print(e)
except Exception as e:
print(e)
else:
print("如果没错,执行else代码")
finally:
print("不管有无异常,都执行")
异常错误帮助
细分错误:捕获异常
try:
正常程序时,执行的代码块
except:
抛出异常时,捕获异常,且自动执行该代码块
else:
没有出错,则执行else
finally:
不管出不出错,肯定执行
try:
# 正常程序
ipt = input('请输入:')
num = int(ipt) # ValueError:以10为基数的int()的无效文字:'fs'
print(num) # 以10为基数的int()无效的文字:'1.5'
except Exception as e:
# 一旦有异常,执行except内部代码块
print(e)
num = 1
print(num)
try:
# li = [2,3]
# li[2] # IndexError 列表索引超出范围
a = 2
b = 0
c = a/b
print(c) # ZeroDivisionError: division by zero 除以零
except IndexError as e:
print(e)
except ZeroDivisionError as e:
print(e)
except Exception as e:
print(e)
else:
print("如果没错,执行else代码")
finally:
print("不管有无异常,都执行")
触发异常:触发异常
raise Exception(异常参数)
'''
主动抛出异常 # 扣工资,炒老板鱿鱼
1.判断煎饼是否熟了没,烹饪时间<5,则抛出异常。否则熟了
'''
def test(time):
if time<5:
raise Exception("没熟..")
try:
test(4)
except Exception as e:
print(e)
else:
print("顾客请吃")
def db():
# 逻辑代码
raise Exception("数据库的错误")
def demo():
try:
db()
except Exception as e:
print(e,'11111') # e指的就是那写汉字
try:
li = [2,3]
li[3]
except Exception as e:
print(e,'22222')
demo()
自定义异常
通过创建一个新的异常类,我们可以给根据自己的需求拟定异常规则,以及给该异常命名。但是注意,该自定义异常继承自Exception类
class OldAmyError(Exception):
def __init__(self,msg): # 将对象实例化
self.msg_err =msg
def __str__(self):
return self.msg_err
# obj = OldAmyError("电脑错了...")
# print(obj)
try:
raise OldAmyError("电脑错额..") # 实例化类 e = OldAmyError
except OldAmyError as e:
print(e)
断言:assert断言
assert断言用于判断一个表达式,当表达式条件为Flase时触发断言异常
'''
断言
用于强制用户服从,可捕获也可不捕获
'''
print('---1---')
assert 1==2 # AssertionError
print('---2---')
模块的导入
模块的导入
import module_name
from module_name import name1,name2…
from module_name import *
from module_name import func as demo_func
先建立demo1.py
import demo
def test1():
print("demo1_test1")
def test2():
print("demo1_test2")
再建立demo2.py并运行
# from demo1 import test1,test2
# test1()
# test2()
# from demo1 import *
# test1()
# test2()
from demo1 import test1 as d1
def test1():
print("demo2_test1")
def test2():
print("demo2_test2")
test1()
d1()
sys模块
内置模块:sys
sys模块是与python解释器交互模块
- sys.argv[]是从程序外部获取参数的桥梁–>[]
-
其中sys.argv[0]-->程序本身文件路径
-
sys.argv[1]-->外部运行时传递的参数
- sys.verson–>解释器版本信息
- sys.path -->模块搜索路径
- sys.exit()–>退出程序
import sys
# print(sys.argv[]) # 类型<class 'list'>跳过的实际值
res = sys.argv[1]
# print(res) #IndexError: list index out of range
if res == 'yes':
print('i am ok')
print(sys.version)
print(sys.path)
print('111')
sys.exit() #打断点
print('222')
os模块
内置模块:os模块
os模块是与操作系统相关的模块
- os.getcwd()–>打印当前工作目录
- os.chdir()–>改变当前工作目录
- os.makedirs()–>以递归方式创建多个文件夹
- os.removedirs()–>以递归方式删除多个空文件夹
- os.mkdir()–>创建单个文件夹
- os.rmdir()–>删除单个空文件夹
- os.path.exists()–>判断该路径下的文件或文件夹是否存在
- os.path.join()–>拼接路径
import os
# print(os.getcwd()) # 返回一个表示当前工作目录的unicode字符串
# os.chdir('C:')
# print(os.getcwd())
# os.makedirs('China\\Changsha') # 存在,再创建则报错
# FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'China\\Changsha'
# os.removedirs('China\\Changsha') # 非空报错
# os.mkdir('China\\Changsha')
# os.rmdir('China\\Changsha')
# print(os.path.exists('China\\Changsha'))
# dirpath = 'Py\\doc'
# if not os.path.exists(dirpath):
# os.makedirs(dirpath)
res = os.path.join(os.getcwd(),'demo5')
print(res)