第4.6节 print、import及断言

本文介绍了Python中print函数、import语句和断言的使用。print函数可通过参数控制输出格式;import语句有多种用法,能从模块导入方法和属性,还可设置别名;断言用于在出现错误条件时终止程序,便于调试。这些内容有助于新手学习Python。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、print函数

前面第二章介绍了print的语法,其语法如下:

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

其中有几个参数,分别说明一下:

sep:表示前面打印的几个参数之间的分隔符是什么,默认是一个空格,我们可以替换成为我们想要的字符串,甚至是一个字符串变量;

end:表示语句最后打印的内容,默认为换行符,如果想要输出后不换行,将end设置为空字符串就可以,即end=’’;

file:表示输出的内容放到哪个文件,默认是放到标准输出;

flush:表述是否刷新输出流。

后面两个参数我们暂且无需关注,sep可以多用一下,这样可以自己控制输出内容的格式。

print语法使用非常简单,大家都可以多练习一下,在此不举例说明了。

二、import语句

    import是从已有的模块(含类)中导入相关方法和属性,可以利用已有的功能迅速开发新的功能,是Python开放的一个重要组成部分。第二章介绍import语句时,介绍了三种用法:
1、import 模块名
2、from 模块名import 方法或属性名
3、from 模块名import  *
其实还有如下用法:
1、  from 模块名import 方法或属性名1, 方法或属性名2,…
该方法可以一次导入多个方法或属性。
2、 import 模块名 as 模块别名
这个方法将导入模块起个别名,后面使用时直接用别名,这种方法一般出于两个目的,一是模块名太长,为了后面使用简写,另外就是起个容易记的别名。
3、 from 模块名import 方法或属性名1 as 方法别名1,…
这个方法是将导入方法起别名,后面使用时直接使用别名,这种方法一般出于三个目的,一是方法或属性名太长,为了后面使用简写,另外就是起个容易记的别名,三是防止不同模块出现相同的方法或属性时可以通过别名进行区分。
定义了别名的地方使用时就可以直接使用别名。例如:
from copy import copy as cp,deepcopy as dcp
使用时就可以直接用cp、dcp函数了。

三、断言

在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要assert断言。python assert 断言语法如下:
assert 表达式 [, 参数]
其中的表达式就是断言要检查的条件,当表达式对应值为False时则终止当前程序执行,给出参数后面的信息抛出异常。
注意:
1、是表达式为False终止程序执行,不是True,这个与if语句不同;
2、可选参数是用于提供错误信息,便于精确判断错误;
3、 断言语句在Python的调试代码时执行,在Python代码的优化级别optimize为1时不会执行,具体优化级别的设置参考Python命令行参数-O

    老猿Python(https://blog.youkuaiyun.com/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。 

# -*- coding: utf-8 -*- import os import sys # 计算项目根目录路径 project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.append(project_root) import allure import pytest from apiservice.api_Rewards import JCWorkApi from commonutils.log import logger @pytest.mark.jcwork class TestJCWorkApi: def setup_class(self): # 从环境变量或配置文件中读取Token self.token = "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhdXRvMDlAcXEuY29tIiwiaXNTZXRQd2QiOjEsImFjY291bnRMZXZlbCI6IjEiLCJ1c2VyTmFtZSI6ImF1dG8wOUBxcS5jb20iLCJ1c2VySWQiOjI0OTY5MDIwMDExMCwidXNlckNvZGUiOiJmNmM2MGMwNTc4NjM3MWI0NjI0ZDljZTc3MDY2ZDdkMyIsImFjY291bnRJZCI6IjI0OTY5MDIwMDExMCIsInNjb3BlIjoiYXV0aCIsImxhc3RBdXRoVGltZSI6MTc1MTYyMTA0MzM0OCwic2lnblR5cGUiOiJVUCIsImV4cCI6MTc1NDIxMzA0MywiZGV2aWNlIjoid2ViIn0.ehq4p6TG37pH_eaMI2RN4dKy37hPNfRWAcl-Sh2Mw9GURpLTYtqIXo45qgkBp-BSPK2gUedo_-mn96YgP5wOYdVnVJ4PUzfzrYScXDesYyAcdyKQs5_Xbs7duuNxyiM_ZeCGDhCvbmldytOXKbDdoPY-UFCE9u7PVhJrHTGn_Cs" # 这里替换成实际的Token或从配置读取 self.api = JCWorkApi(token=self.token) @pytest.mark.parametrize("activity_id", ["312902218894402"]) # 可以配置多个id进行测试 @allure.story("获取活动信息接口") def test_get_activity(self, activity_id): allure.dynamic.title(f"获取活动id: {activity_id}") logger.info(f"开始请求活动信息,活动ID:{activity_id}") res = self.api.get_activity(activity_id) logger.info(f"返回的状态码:{res.status_code}") logger.info(f"返回的内容:{res.json()}") # 断言请求成功 assert res.status_code == 200, "请求失败,状态码不为200" # 获取返回内容并进行更多的具体断言 result = res.json() print(result) # 根据实际返回结构验证的断言 assert "data" in result, "返回数据中缺少'data'字段" # 对于 “score” 字段的断言 assert "score" in result["data"], "返回数据中的'data'缺少'score'字段" assert isinstance(result["data"]["score"], int), "返回数据中的'score'字段不是整数" 此脚本留着后面问题调用或者参考,脚本名字是auto02
07-05
import os import sys import pytest import allure from apiservice.api_Rewards import JCWorkApi from commonutils.log import logger from data.rewards.Coupon_Data_Sharing import store_coupon_data from data.rewards.Coupon_Data_Sharing import get_spec_id from data.rewards.Coupon_Data_Sharing import get_distribute_amount from data.rewards.Coupon_Data_Sharing import clear_coupon_data from data.rewards.Coupon_Data_Sharing import get_user_coupons # 计算项目根目录路径 project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.append(project_root) @pytest.mark.jcwork class TestJCWorkApi: def setup_class(self): self.token = "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhdXRvMTFAcXEuY29tIiwiaXNTZXRQd2QiOjEsImFjY291bnRMZXZlbCI6IjEiLCJ1c2VyTmFtZSI6ImF1dG8xMUBxcS5jb20iLCJ1c2VySWQiOjI0OTcxNjk5NjMwMCwidXNlckNvZGUiOiIyNmQ5OWI5MGVlZGY1ZjJiNWY2Mjk5NjViYTQ0OTJjZiIsImFjY291bnRJZCI6IjI0OTcxNjk5NjMwMCIsInNjb3BlIjoiYXV0aCIsImxhc3RBdXRoVGltZSI6MTc1MTYzNDEyNzQ5NCwic2lnblR5cGUiOiJVUCIsImV4cCI6MTc1NDIyNjEyNywiZGV2aWNlIjoid2ViIn0.iaDGkPq4OE-M6eedgxwRMuCTDPBa0B06aBn9DNPeFS21B9NUlH06dIEN4dU-wjTz0wo7bbw3vVRxG6PXDNv0FXFrVI27Cdizmij_CCvpekqqwXGO4qxfHn4hCMaztLpqFVOEGkKZ60VrqAstXWYAArX6PKWMZl9ObDHa4a8XAfY" # 这里替换成实际的Token或从配置读取 self.api = JCWorkApi(token=self.token) @pytest.mark.parametrize("activity_id", ["312902218894402"]) # 可以配置多个id进行测试 @allure.story("申请活动接口") def test_apply_activity(self, activity_id): allure.dynamic.title(f"申请活动ID: {activity_id}") logger.info(f"开始申请活动,活动ID:{activity_id}") res = self.api.apply_activity(activity_id) logger.info(f"返回的状态码:{res.status_code}") # 记录响应内容(非500错误时才记录) logger.info(f"返回的内容:{res.json()}") result = res.json() print(result) # 断言请求成功 assert res.status_code == 200, "请求失败,状态码不为200" # 根据实际返回结构验证的断言 assert "code" in result, "返回数据中缺少'code'字段" # 特殊处理500错误 if result["code"] == 500: error_message = "接口返回500错误:需要开发人员上传新用户token,因为一个用户token只能提交一次申请活动" logger.warning(error_message) allure.dynamic.description(error_message) # 在Allure报告中添加描述 pytest.skip(error_message) # 跳过当前测试用例 return assert result["code"] == 200, f"返回的code不为200,实际为{result['code']}" # 验证data字段存在 assert "data" in result, "返回数据中缺少'data'字段" # 验证必要字段 required_fields = ["applyId", "status"] for field in required_fields: assert field in result["data"], f"返回数据中的'data'缺少'{field}'字段" 以上脚本,留着备份,以便后面问题可以进行调用参考,名字叫auto03
最新发布
07-08
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LaoYuanPython

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

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

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

打赏作者

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

抵扣说明:

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

余额充值