【python】异常

异常

当检测到一个错误时,python解释器就无法继续执行了,出现一些错误的提示,这就是异常。

异常的捕获方法

当程序遇到bug,可能整个程序因为bug停止运行;也可能对bug进行提醒,整个程序继续运行。

捕获异常的作用:提前假设某处会出现异常,做好准备,当真正出现异常的时候采取后续手段。

基本语法:

try:
	可能发生错误的代码
except:
	如果出现异常执行的代码

例如:尝试以’r’模式打开文件,如果文件不存在,则以’w’方式打开

try:
	f=open('linux.txt','r')
except:
	f=open('linux.txt','w')

打印异常的具体信息

try:
	print(name)
except NameError as e:
	print(e)

捕获多个异常

可以把要捕获的异常类型的名字,放到except后,并使用元组的方式进行书写。

try:
	print(1/0)
except(NameError,ZeroDivisionError):
	print('ZeroDivision错误')

捕获所有异常

try:

except Exception as e:
	print('出现异常')

异常的finally

finally表示的是无论是否异常都要执行的代码,例如关闭文件。

try:
	f=open('test.txt','r')
except Exception as e:
	f=open('test.txt','w')
else:
	print('没有异常')
finally:
	f.close()

异常的传递

异常具有传递性。当函数func1中发生异常,并且没有捕获处理这个异常的时候,异常会传毒到函数func2,当func2也没有捕获这个异常的时候,main函数会捕获这个异常。当所有函数都没有捕获异常的时候,程序就会报错。

python模块

python模块,是一个python文件,以.py结尾,模块能定义函数、类和变量,也能包含可执行的代码。

模块的作用:python中的每一个模块可以快速实现一些功能,比如实现和时间相关的功能就可以使用time模块。可以认为一个模块就是一个工具包。

模块在使用前需要先导入,语法:[from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]

常用的组合形式:

import 模块名
from 模块 import 类、变量、方法等
from 模块名 import *
import 模块名 as 别名	# 设置模块别名
from 模块名 import 功能名 as 别名	# 设置功能别名

例如:导入time模块

# 导入时间模块
import time

print("开始")
time.sleep(1)
print("结束")

模块可以Ctrl+点击,进入模块查看源代码。

使用from导入time的sleep功能(函数)

from time import sleep
# from time import * 表示导入全部功能
print("开始")
sleep(5)
print("结束")

自定义模块

每个python文件都可以作为一个模块,模块的名字就是文件的名字。

# 新建python文件my_moudle1.py
def test(a, b):
	print(a + b)


# 新文件
import my_moudle1

my_moudle1.test(10, 20)

注意:当导入多个模块的时候,且模块内有同名功能,调用到的是后导入的模块的功能

测试模块

在模块内部输入main,会出现if __name__ == '__main__';,在内部加上测试,只有当程序直接执行才会进入if内部,否则无法进入。可以正常测试模块功能,但是在调用时不会显示测试内容。

如果一个模块文件中有'__all__'变量,它的值是一个列表。当使用import *时,只能导入这个列表中的元素。

python包

从物理上看,python包就是一个文件夹,在该文件夹下包含了一个__init__.py文件,该文件夹可用于包含多个模块文件;从逻辑上看,包的本质依然是模块。

当模块文件越来越多时,包可以管理模块,也就是包含多个模块,但包的本质依然是模块。

新建包后,包内部会自动创建__init__.py文件,这个文件控制着包的导入行为,通过这个文件表示一个文件夹是python的包,而非普通文件夹。

# 创建python包:New->Python Package

# 自动生成__init__.py

#新建my_moudle1.py
def info_print1():
	print("模块1")

#新建my_moudle2.py
def info_print2():
	print("模块2")

# 导入自定义包中的模块
# 方式1
import my_package.my_moudle1
import my_package.my_moudle2

my_package.my_noudle1.info_print1()
my_package.my_noudle1.info_print2()

# 方式2
from my_package import my_moudle1
from my_package import my_moudle2

# 方式3
from my_package.my_moudle1 import info_print1
from my_package.my_moudle1 import info_print2
info_print1()
info_print2()

# 通过__all__变量,控制import *
# 在__init__.py中添加__all__列表
from my_package import *
my_moudle1.info_print1()
my_moudle2.info_print2()

安装第三方python包

包可以包含一些python模块,每个模块内含许多功能。一个包就是一堆同类型功能的集合体。

第三方包可以极大地帮助我们提高开发效率。如:

  • 科学计算:numpy包
  • 数据分析:pandas包
  • 大数据计算:pyspark、apache-flink包
  • 图形可视化:matplotlib、pyecharts
  • 人工智能:tensorflow包
    python没有内置,需要安装才可以导入使用。在命令提示符程序中输入pip install 包名称
    由于连接国外网站下载速度很慢,可以连接国内网站进行包的安装:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
    import 包名称检查是否安装成功
    或者在pycharm右下角配置解释器->interpreter settings->+号->搜索并下载第三方包

自定义包

创建一个自定义包my_utils
提供两个模块:

  • str_util.py(字符串相关工具)
    函数str_reverse(s):接收传入字符串,将字符串反转返回
    函数substr(s, x, y):按照下标x和y,对字符串进行切片
  • fle_util.py(文件处理相关工具)
    函数print_file_info(file_name):接收传入文件的路径,打印文件的全部内容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
    函数append_to_file(file_name, data):接收文件路径以及传入数据,将data追加写入到文件中
# 字符串相关工具模块

def str_reverse(s):
	"""
	功能是将字符串反转
	:param s:将被反转的字符串
	:return:反转后的字符串
	"""
	return s[::-1]

def substr(s, x, y):
	"""
	功能是按照给定的下标完成给定字符串的切片
	:param s:将被切片的字符串
	:param x:切片的开始下标
	:param y:切片的结束下标
	:return:切片完成后的字符串
	"""
	return s[x:y:]
# 文件处理相关工具模块

def print_file_info(file_name):
	"""
	功能是将给定路径的文件内容输出到控制台中
	:param file_name:将读取的文件路径
	:return:Name
	"""
	f=None
	try:
		f=open(file_name,"r",encoding="UTF-8")
		content=f.read()
		print(content)
	except Exception as e:
		print(f"程序异常,原因:{e}")
	finally:
		if f:	# 以防f=None
			f.close()
def append_to_file(file_name, data):
	"""
	功能是将指定的数据追加到指定的文件中
	:param file_name:指定的文件的路径
	:param data:指定的数据
	:return:None
	"""
	f=open(file_name,"a",encoding="UTF-8")
	f.write(data)
	f.write("\n")
	f.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶雨莳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值