基本语法
try:
可能发生错误的代码
except:
如果出现异常执行的代码
# 基本捕获异常语法
try:
f = open("./data.txt","r",encoding="UTF-8")
except:
print("文件不存在")
f = open("./data.txt","w",encoding="UTF-8")
捕获指定异常
# 捕获指定的异常
try:
print(name)
except NameError as e:
print("出现未定义变量异常")
print(e)
如果尝试执行的代码异常类型和要捕获的异常类型不一致,则无法捕获异常。一般情况下try下方只放一行尝试执行的代码
捕获多个异常
# 捕获多个异常
try:
1/0
print(name)
except (NameError,ZeroDivisionError) as e:
print("出现未定义变量异常 或是 被除数为0异常")
print(e)
捕获所有异常
# 捕获所有异常
try:
1/0
print(name)
f = open("data.txt","r",encoding="UTF-8")
except Exception as e:
print(f"出现异常,异常信息为:{e}")
异常else、finally
try:
1/0
print(name)
f = open("data.txt","r",encoding="UTF-8")
except Exception as e:
print(f"出现异常,异常信息为:{e}")
else:
print("未出现异常,执行未异常的逻辑")
finally:
print("无论如何,我都会执行")
与Java一致,没处理就向上抛,谁用抛给谁,最终抛给程序,没捕获则报错
作用—— Java中的jar包
模块导入方式
[from 模块名] import [模块|类|变量|函数|*] [as 别名]
# [] 内的 可有可无
# 使用import导入time模块使用sleep功能
import time
print("Hello")
time.sleep(3)
print("World")
# 使用from导入time的sleep功能
from time import sleep # 示意为只从time模块中拿sleep方法来使用,其它方法不使用
print("Hello")
sleep(3) # 不用通过time,直接使用即可
print("World")
# 使用*导入time模块的全部功能
from time import * # 将time模块中的所有方法都导入进来,使用时候就可以不用通过time.
print("Hello")
sleep(3)
print("World")
# 使用as给特定功能加上别名
import time as t
t.time(3)
from time import sleep as sl
sl(3)
每个Python文件都可以作为一个模块,模块的名字就是文件的名字也就是说自定义模块名必须要符合标识符命名规则
# 导入自定义模块使用
#import model01
from model01 import add
add(3,4)
【问题:如果还导入的模块,里面存在测试执行函数的代码】
def test(a, b):
print(a + b)
test(1, 1)
【解决方案:通过模块中的】
def test(a, b):
print(a + b)
# 只在当前文件中调用该函数,其他导入的文件内不符合该条件,则不执行test函数调用
if __name__ == '__main__':
test (1, 1)
当导入多个模块的时候,且存在同名的功能,当同时调用的时候,后面导入模块的功能会覆盖前面的(只执行了后面的)
__all__ = ["testA"]
def testA():
print("A")
def testB():
print("B")
调用
# __all__变量
from model03 import *
testA()
testB() #报错
作用
示例
导入包:方式一
import 包名.模块名
# 导入自定义的包中的模块,并使用
import myPackage.model01
import myPackage.model02
myPackage.model01.testA()
myPackage.model02.testA()
import myPackage.model01 as a
import myPackage.model02 as b
a.testA()
b.testA()
from myPackage import model01
model01.testA()
from myPackage.model01 import testA
testA()
导入包:方式二:
from 包名 import *
必须在 init.py文件中添加 all 变量,控制允许导入的模块列表
# 通过__all__变量,控制import *
from myPackage import *
model01.testA()
model02.testA() # 报错
类似Java中的jar
安装第三方包—— pip
pip的网络优化
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
安装第三方包——Pycharm
# 接收传入字符串,将字符串反转返回
def str_reverse(s):
return s[::-1]
# 按照下标x和y,对字符串进行切片
def substr(s,x,y):
return s[x:y:1]
if __name__ == '__main__':
str.str_reverse("abcdefg")
str.substr("马浩楠22190", 3, 5)
# 接收传入文件的路径,打印文件的全部内容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
def print_file_info(file_name):
try:
f = open(file_name, "r", encoding="UTF-8")
print(f.read())
except Exception as e:
print(f"文件不存在,异常信息:{e}")
finally:
if f:
f.close()
# 接收文件路径以及传入数据,将数据追加写入到文件中
def append_to_file(file_name,data):
f = open(file_name,"a",encoding="UTF-8")
f.writelines(data)
if __name__ == '__main__':
print_file_info("./data.txt")
append_to_file("./append.txt", "我叫马浩楠\n今年22岁\n身高190")
import my_utils.file_util as file
import my_utils.str_util as str
file.print_file_info("./data.txt")
file.append_to_file("./append.txt","我叫马浩楠\n今年22岁\n身高190")
print(str.str_reverse("abcdefg"))
print(str.substr("马浩楠22190",3,5))