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编码的更多相关文章

  1. IT第二十天 - 面向对象编程思想、抽象类、异常处理、程序操作日志记录、本周总结 ★★★

    IT第二十天 上午 面向对象编程思想 1.组装电脑的设计: (1)电脑的组成:显示器+机箱 (2)机箱的组成:电源+主板+硬盘 (3)主板所包含的部件:cpu+内存+PCI接口+usb接口 (4)PC ...

  2. 简学Python第六章__class面向对象编程与异常处理

    Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群  群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性p ...

  3. Python3基础(6)面向对象编程、异常处理

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...

  4. 第2课第3节_Java面向对象编程_继承性_P【学习笔记】

    摘要:韦东山android视频学习笔记  面向对象程序的三大特性之继承性:继承性的主要作用就是复用代码.继承性也有一定的限制,如图一 图一 1.我们在第2课第2节_Java面向对象编程_封装性_P 中 ...

  5. Python全栈开发之7、面向对象编程进阶-类属性和方法、异常处理和反射

    一.类的属性 1.@property属性 作用就是通过@property把一个方法变成一个静态属性 class Room: def __init__(self,name,length,width,he ...

  6. 第2课第1节_Java面向对象编程_类的引入_P【学习笔记】

    摘要:韦东山android视频学习笔记 1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字.代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添 ...

  7. JAVA的面向对象编程--------课堂笔记

    面向对象主要针对面向过程. 面向过程的基本单元是函数.   什么是对象:EVERYTHING IS OBJECT(万物皆对象)   所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么 ...

  8. JAVA面向对象编程课程设计——网络版单机斗地主

    一.团队介绍 成员姓名 任务分配 成员课程设计博客链接 兰泽祥(组长) 数据库,斗地主规则的实现,人机自动出牌的算法,实体类的设计 JAVA面向对象编程课程设计--web版斗地主 吴修恩 JSP界面的 ...

  9. JAVA的面向对象编程

    JAVA的面向对象编程 面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 全部的事物都有两个方面: 有什么(属性):用来描写叙 ...

随机推荐

  1. python、pip、whl安装和使用

    1 python的安装 首先,从python的官方网站 www.python.org下载需要的python版本,地址是这个: http://www.python.org/ftp/python/2.7. ...

  2. Minor GC和Full GC区别(转)

    http://blog.csdn.net/u010796790/article/details/52213708   概念: 新生代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为 Ja ...

  3. Linux上db2安装

    Linux上db2安装:https://blog.csdn.net/nayanminxing/article/details/69372283

  4. [转] 把eclipse设置为黑色主题 方式二

    首先,废话不多说,给大家看一下我设置成黑色主题后的效果: 至于怎么达到这个效果呢,首先是中间的编辑区. 从我的云盘里下载压缩包,解压到eclipse目录的dropins文件夹下,你就会有各种各样的编辑 ...

  5. php AES-128-CBC 加密 通信java

    <?phpheader("Content-type: text/html; charset=utf-8");require('MyAES.php');class Xfb{ / ...

  6. wix toolset 用wixui 默认中文

    light.exe .\test.wixobj -ext WixUIExtension -ext WixUtilExtension -cultures:zh-CN

  7. 20145312 实验四《Andoid开发基础》

    20145312 实验四<Andoid开发基础> 实验内容 1. 安装Android Studio 2. 运行安卓AVD模拟器 3. 使用Android运行出模拟手机并显示自己的学号 实验 ...

  8. 【转载】showModalDialog returnValue is undefined in Google Chrome

    showModalDialog returnValue is undefined in Google Chrome Posted on August 22, 2012by briancaos For ...

  9. jQuery的$.each()遍历checkbox

    $("input[type='checkbox']").each(function(){ var value = $(this).val(); //获得值 $(this).attr ...

  10. 爬虫框架Scrapy之Downloader Middlewares

    反反爬虫相关机制 Some websites implement certain measures to prevent bots from crawling them, with varying d ...