Python学习笔记 10

1. python操作mysql(mariadb)数据库

首先要确保系统中有python环境,然后需要安装Python访问mysql数据库的模块MySQL-python

#yum install MySQL-python -y

环境好了我们直接上代码测试

import MySQLdb as mysql
#导入python操作数据库的模块并重命名为简单好记的标志

con = mysql.connect('localhost','root','redhat','lockey')
#连接服务器及数据库,当然这一步可以不用写数据库,可以在后面通过cnn.select_db('lockey')来连接到具体的数据库

db = con.cursor()
# 使用cursor()方法获取操作游标 

insert_com = 'insert into User values(%s,%s,%s)'
db.execute(insert_com,('ha1',23,'male'))
# 使用execute方法执行SQL语句

#上边两句的作用等同于下面这句,只不过思想更好一点
#db.execute('insert into User values("ha1",23,"male")')

con.commit()
#提交事务

db.execute('select * from User')
#做一次数据库查询的操作

data = db.fetchall()
# 使用 fetchall() 方法获取所有执行结果,结果为元组类型。
for i in data:
    print i
db.close()
#关闭游标
con.close()
#关闭数据库

注意:

  • 对于数据的获取有点类似生成器,当游标移动到最后的时候就不会再有数据了,可以通过db.cursor(number,’absolute’)将游标移动到指定位置
  • 在使用python进行数据插入时如果要通过参数传递,无论你要插入的数据是什么类型,占位符永远都要用%s(为什么通过python往mysql数据库插入数据时整型数据的占位符会报错?)

2. 关于异常

2.1 触发异常

我们可以使用raise语句自己触发异常

raise语法格式如下:

raise [Exception [, args [, traceback]]]

语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是”None”。

最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
一个异常可以是一个字符串,类或对象。 Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数。

定义一个异常非常简单,如下所示:

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

注意:为了能够捕获异常,”except”语句必须有用相同的异常来抛出类对象或者字符串。

例如我们捕获以上异常,”except”语句如下所示:

try:
    正常逻辑
except "Invalid level!":
    触发自定义异常    
else:
    其余代码

示例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 定义函数
def mye( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

try:
    mye(0)                // 触发异常
except "Invalid level!":
    print 1
else:
    print 2

执行以上代码,输出结果为:

$ python test.py 
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    mye(0)
  File "test.py", line 7, in mye
    raise Exception("Invalid level!", level)
Exception: ('Invalid level!', 0)

2.2 用户自定义异常

通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。

以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。

在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。

class Networkerror(RuntimeError):
    def __init__(self, arg):
        self.args = arg

在你定义以上类后,你可以触发该异常,如下所示:

try:
    raise Networkerror("Bad hostname")
except Networkerror,e:
#注意python3不支持这种写法
#except Networkerror as e:
    print e.args

2.3 预定义的清理行为

一些对象定义了标准的清理行为,无论系统是否成功的使用了它,一旦不需要它了,那么这个标准的清理行为就会执行。

这面这个例子展示了尝试打开一个文件,然后把内容打印到屏幕上:

for line in open("myfile.txt"):
    print(line, end="")

以上这段代码的问题是,当执行完毕后,文件会保持打开状态,并没有被关闭。

关键词 with 语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行他的清理方法:

with open("myfile.txt") as f:
    for line in f:
        print(line, end="")

以上这段代码执行完毕后,就算在处理过程中出问题了,文件 f 总是会关闭。

3. 正则表达式:

3.1 元字符:

[[:digit:]]
[[:upper:]]

3.2 通配符:

*
?
$,^
[]

3.3 正则匹配:

1). 普通字符: hello,world
2). ^,$,[]  , ^和$在[]中不代表以什么开头以什么结尾的意思;
    [0-9],[a-z],[A-Z],[a-zA-Z],[a-z0-9]
3). 
    \d          # digit,匹配所有的数字,[0-9]
    \D          # 匹配所有的非数字,[^0-9]
    \w          # [0-9a-zA-Z_]
    \W          # [^0-9a-zA-Z_]
    \s          # space,匹配所有的空白字符
    \S          # 匹配所有的非空白字符
4).
{n}         # 代表重复n次
{m,n}       # 代表重复m次到n次
{0,}        # 重复0次到无穷大,*
{1,}        # 重复1次到无穷大,+
{0,1}       # 重复0次或一次,?

3.4 练习

#检验变量名是否合法
In [34]: myre = r"^[_a-zA-Z]\w{0,}"

In [35]: re.findall(myre,"1abc")
Out[35]: []
#检验电话号码是否匹配下面要求
#010-12345678(以010开头,-可省略,后面是8个数字)
myre = r"^010-{0,1}\d{8}"
myre = r"^010-?\d{8}"

myre = r"^010-?\d{8}"
re.findall(myre,s)

3.5 对正则表达式进行编译

myre = r"^010-?\d{8}"
comR = myre.compile(myre)
re.findall(comR,s)
re.finditer(comR,s)



re.sub()        # 相当于s.replace()
re.split(r"[|:\+]")             # s.split()

4. python代码调试

代码调试的几种方式:

  • print,把你想知道的变量打印出来;缺点是,你将来需要手动删除print;
  • 断言, assert (你的预期),“如果没有达到预期显示的内容”
  • logging
  • pdb

logging调试

import logging
import logging.config

# logging.info("hello")
# logging.warn("warn: age is error")
# logging.critical("critical:age is critical")
logging.basicConfig(level=logging.INFO)
logging.info("hello")
# logging.info('a=%d' %a)
#
# # debug < info < warn < error < critical
# age = -1

assert断言

 b = abs(-1)
 print type(b)
 b = "hello"
 assert type(b) == str,'b is int'
 b.upper()

pdb调试
在程序内部需要导入pdb模块然后使用pdb.set_trace()来进行调试,如果是程序外部的话可以使用以下格式:

python -m pdb xxx.py
import pdb

 s = 0
s = s+1
pdb.set_trace()
 n = str(s)
print n
 if __name__ == "__main__":
     pass
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值