第8课:异常处理、面向对象编程、发送邮件、url编码
1. 异常处理
import traceback
import pymysql
import requests def calc(a, b):
res = a / b
return res def main(): money = input("输入多少钱:")
month = input("还几个月:")
try:
res = calc(int(money), int(month))
except ZeroDivisionError as e: # try里面的代码如果出错了,走except里面带的代码
traceback.print_exc() # 只是输出错误信息,不影响代码继续执行
print("月份必须是大于1的整数, %s" % e)
except ValueError as e:
print("输入必须是整数,%s" % e)
except Exception as e: # 捕获所有的异常
print("未知错误,%s" % e)
else: # 没有出错的情况下走else中的代码
print('每个月应还多少钱', res)
finally: # 不管有没有捕捉到异常,都要执行的代码
pass
print("hahahha") def req():
url = 'http://api.nnzhp.cn/api/user/all_stu'
mpp = {'Referer': 'http://api.nnzhp.cn/'}
res = requests.get(url, headers=mpp)
print(res.json().get('stu_info'))
if len(res.json().get('stu_info')) > 0:
pass
else:
raise Exception('接口未返回数据') # raise主动抛出异常,程序中断
# raise ValueError
print("hahha") req()
2. 面向对象编程
1)类
'''
定义类名时,最好大写
用类的话,得先实例化
self代表的是实例化好的对象,即本类对象
私有函数,私有变量:出了类就不能使用的了。
''' class Car(): # 类是一个模型,模板
# 构造函数,类初始化时执行
# 如果类实例化时需传入一组参数,需在__init__函数中写参数
def __init__(self, color, window):
self.color = color
self.window = window
self.price = 1000
print("init...") def run(self):
print("汽车在跑。。。") def my_self(self): print("我是一个汽车,我的颜色是:%s,我有%s个窗户" % (self.color, self.window)) bus = Car("黄色", "3") # 实例化, 把模型做成实际的汽车,这个过程叫实例化
# 实例就是具体造出来的东西,通过类实例化造出的东西,就是实例。
# 对象,即实例
bus.my_self()
self小结
class My(object):
country = "China" # 类变量 def __init__(self, name):
self.name = name # 实例变量,必须实例化后才能用的变量,也称为成员变量
self.cry() def cry(self):
print("%s is crying..." %self.name) def learn(self):
self.skill = ["开车"] def my_self(self):
print("我的名字是【%s】 我会【%s】" %(self.name, self.skill)) print(My.country)
qxy = My('qxy')
qxy.skill = "写代码"
qxy.learn()
qxy.my_self() # 我的名字是【qxy】 我会【写代码】
print(qxy.name)
2)继承
# 继承
# 父类有的变量 函数,子类全部能继承到
# 如果定义的类,有很多重复功能,那么可以将它定义为父类
# class Father(object):
# 属性方法:看上去好像是一个属性,实际是一个方法,也得实例化后才能使用
@property
def money(self):
return 100000 def smoke(self):
print("抽烟") def drink(self):
print("喝碱水") def run(self):
print("每天喝水") class Yjz(Father): def drive(self):
print("我会开车") yjz = Yjz()
print(yjz.money) class Animal(object):
def eat(self):
print("i am eating")
3) 私有函数、私有变量
import redis class MyRedis(object):
xiaohei = "小黑" def __init__(self, host, password='', port=6379):
self.__host = host # 私有变量,只能在类里面使用,在类外面使用提示不存在这个变量
self.password = password
self.port = port
# self.__conn_redis() def __conn_redis(self): # 私有方法,只能在类里面使用
print(self.__host)
self.conn = redis.Redis(host=self.__host,password=self.password, port=self.port) def get(self, k):
return self.conn.get(k).decode() # 静态方法:只是写在了类里面的方法,用不了self的属性或方法,调用不了类中的其它函数
@staticmethod
def other():
print("我是other方法") # 类方法:不需要实例化就可以直接使用,可以使用类的变量和方法
@classmethod
def class_function(cls):
print(cls.xiaohei)
cls.class_function1()
# print(cls.get(cls,'session:qxy')) @classmethod
def class_function1(cls):
print("类方法2") r = MyRedis('127.0.0.1')
MyRedis.other()
# print(r.get('session:qxy'))
# print(r.__host)
# print(r.__conn_redis)
MyRedis.class_function()
4) 析构函数
import pymysql class OpMySql1: # 经典类
pass class OpMySql(object): # 新式类 # 析构函数,实例被销毁时执行此函数
def __del__(self):
print("over")
self.cur.close()
self.conn.close() bus = OpMySql('***', '**', '***', '***')
print(bus.db_execute("select * from user;"))
# del bus # 这也是实例被销毁的一种写法,销毁时会调用__del__方法
# bus.close()
3. 发送邮件
import smtplib # 发邮件的模块
from email.mime.text import MIMEText # 构造邮件内容的对象
from email.mime.multipart import MIMEMultipart # 发附件要导入的模块 email_host = 'smtp.126.com' # 邮箱地址 email_sender = '**@126.com' # 发送者账号
email_pwd = '***' # 发送者密码
email_receiver_list = "**@qq.com, **@qq.com" # 收件人邮箱,多个账号的话
me = email_sender
# msg = MIMEText('邮件发送测试内容') # 邮件内容
# msg['Subject'] = '邮件测试主题' # 邮件主题
# msg['From'] = me # 发送者账号
# # msg['To'] = maillist # 接收者账号列表
# attachment 附件
attach_obj = MIMEMultipart() # 创建带附件邮件的对象
file = 'a.txt'
content = "邮件正文"
att = MIMEText(open(file, encoding='utf-8').read()) # 邮件内容对象
att["Content-Type"] = 'application/octet-stream'
att["Content-Disposition"] = 'attachment; filename="%s"' % file
attach_obj.attach(att)
# msg.attach(MIMEText(content)) # 邮件正文的内容
attach_obj['Subject'] = '邮件测试主题' # 邮件主题
attach_obj['From'] = me # 发送者账号
attach_obj['To'] = email_receiver_list # 接收者账号
# smtp = smtplib.SMTP_SSL(email_host,port=465)#qq邮箱
# smtp = smtplib.SMTP(email_host,port=25)#其他邮箱
# smtp.login(email_user,email_pwd)
# smtp.sendmail(email_user,maillist,msg.as_string())
# smtp.quit() smtp = smtplib.SMTP('smtp.126.com', port=25) # 和邮箱服务器建立连接
smtp.login(me, email_pwd)
# attach_obj['To']是str类型,sendemail()中接收邮件人是list类型
smtp.sendmail(me, email_receiver_list.split(','), attach_obj.as_string()) # 将邮件对象转换为string
# smtp = smtplib.SMTP(email_host, port=25) # 连接邮箱,传入邮箱地址,和端口号,smtp的端口号是25
# smtp.login(email_user, email_pwd) # 发送者的邮箱账号,密码
# smtp.sendmail(me, maillist, msg.as_string())
# # 参数分别是发送者,接收者,第三个是把上面的发送邮件的内容变成字符串
smtp.quit() # 发送完毕后退出smtp
print('email send success.')
4. URL编码
import urllib.parse
s = "besttest 自动化测试"
print(urllib.parse.quote(s)) # url编码
# 打印结果:besttest%20%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95
src = "https://www.baidu.com/s?ie=UTF-8&wd=%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95"
# src
print(urllib.parse.unquote(src)) # url解码
# 打印结果: https://www.baidu.com/s?ie=UTF-8&wd=自动化测试
print(urllib.parse.unquote_plus(src)) # 加强版url解码
# 打印结果: https://www.baidu.com/s?ie=UTF-8&wd=自动化测试
第8课:异常处理、面向对象编程、发送邮件、url编码的更多相关文章
- IT第二十天 - 面向对象编程思想、抽象类、异常处理、程序操作日志记录、本周总结 ★★★
IT第二十天 上午 面向对象编程思想 1.组装电脑的设计: (1)电脑的组成:显示器+机箱 (2)机箱的组成:电源+主板+硬盘 (3)主板所包含的部件:cpu+内存+PCI接口+usb接口 (4)PC ...
- 简学Python第六章__class面向对象编程与异常处理
Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群 群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性p ...
- Python3基础(6)面向对象编程、异常处理
---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...
- 第2课第3节_Java面向对象编程_继承性_P【学习笔记】
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之继承性:继承性的主要作用就是复用代码.继承性也有一定的限制,如图一 图一 1.我们在第2课第2节_Java面向对象编程_封装性_P 中 ...
- Python全栈开发之7、面向对象编程进阶-类属性和方法、异常处理和反射
一.类的属性 1.@property属性 作用就是通过@property把一个方法变成一个静态属性 class Room: def __init__(self,name,length,width,he ...
- 第2课第1节_Java面向对象编程_类的引入_P【学习笔记】
摘要:韦东山android视频学习笔记 1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字.代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添 ...
- JAVA的面向对象编程--------课堂笔记
面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么 ...
- JAVA面向对象编程课程设计——网络版单机斗地主
一.团队介绍 成员姓名 任务分配 成员课程设计博客链接 兰泽祥(组长) 数据库,斗地主规则的实现,人机自动出牌的算法,实体类的设计 JAVA面向对象编程课程设计--web版斗地主 吴修恩 JSP界面的 ...
- JAVA的面向对象编程
JAVA的面向对象编程 面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 全部的事物都有两个方面: 有什么(属性):用来描写叙 ...
随机推荐
- HDU2189 来生一起走
好久没发博客了,最近遇到以下奇葩错误,不明觉厉,忍不住发一篇 /*母函数,因为要求的是素数,那么先打一个素数表,所有的因子都是素数构成 但是遇到一个奇葩事,当num初值取1,结果就出不来,运行了好久 ...
- 在父页面访问iframe的东西
playBox是iframe里的元素id
- maven-surefire-plugin
本文参考自:https://www.cnblogs.com/qyf404/p/5013694.html surefire是maven里执行测试用例(包括testNG,Junit,pojo)的插件,他能 ...
- 20145313Java第五次实验
实验内容 网络编程TCP代码的结对完成,一人服务器,一人客户端,进行数据传输. 结伴对象:20145313卢鑫 实验步骤 本次实验中,需要两台电脑互联.一台电脑开启无线网,充当客户端,另一台连入局域网 ...
- char,short,int长度
数据类型的本质就是固定内存大小的别名 char:1byte short: 2byte int:4byte 其实变量也是对连续内存的别名,相当于这段内存的句柄.钩子
- (转)C#调用C函数(DLL)传递参数问题
备忘: 1.C函数参数为字符串char*.如果是入参,对应C#中string或StringBuilder:如果是出参对应C#中StringBuider: 2.C函数参数为结构体指针,需在C#中对应定义 ...
- 安装配置mariadb-10.1.19
本文参考:http://chenzehe.iteye.com/blog/1266260 感谢原作者的分享! 首先安装/更新一些编译时会用到的基础包 [root@localhost local]# y ...
- jsp选项卡导航实现——模板
效果 刚进来页面的样子 在第二个选项卡上方时 点击后 离开 同样第三个 点击 移走鼠标 代码 <%@ page contentType="text/html;charset=UTF-8 ...
- 安迪的第一本字典 - set--sstream
#include <iostream> #include <string> #include <set> #include <sstream> usin ...
- 跟着vamei复习概率论
最近重新看了一下概率论,感觉很多东西都遗忘了,还会陷入各种误区,赶紧的纠正回来. 概率论这块,主要内容包括: 事件.条件概率.随机变量.随机变量的分布函数.概率密度.联合分布.期望.方差.协方差. 我 ...