Python学习笔记09
异常处理
参考文章:http://blog.csdn.net/sinchb/article/details/8392827
有异常则执行except子句——类似C#的catch
就是当没有检测到异常的时候,则执行else语句——C#并没有这个分之
finally子句是无论是否检测到异常,都会执行的一段代码——和C#一致
使用raise来抛出异常——类似C#的throw
with语句——类似C#的using
try:
...
except exception1:
...
except exception2:
...
except:
...
else:
...
finally:
...
- import logging
- logging.basicConfig(level=logging.DEBUG,
- format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
- datefmt='%a, %d %b %Y %H:%M:%S',
- filename='./log.txt',
- filemode='a+')
- try:
- f = open("/root/test.py")
- f.close()
- except IOError,e:
- logging.error("%s"% e)
- else:
- logging.info("%s"%"no exception caught\n")
- #finally:
- # logging.info("last")
- raise "luan tan qing !" #直接抛出异常
- assert len("love") != len("like"),'assert can\'t pass!' #断言
- #使用with块,则会关闭上下文对象
- with open('/root/test.py') as f:
- for line in f:
- print line
2.MySQL数据库
使用标准的DB-API来访问数据库
参考:http://www.cnblogs.com/hongten/p/hongten_python_mysqldb.html
2.1创建表
- db = MySQLdb.connect("localhost","pzdn","pzdn","testdb" )
- print db
- cursor = db.cursor()
- sql = """CREATE TABLE EMPLOYEE (
- FIRST_NAME CHAR(20) NOT NULL,
- LAST_NAME CHAR(20),
- AGE INT,
- SEX CHAR(1),
- INCOME FLOAT )"""
- cursor.execute(sql)
- db.close()
2.2插入数据
- import MySQLdb
- db = MySQLdb.connect("localhost","pzdn","pzdn","testdb" )
- print db
- cursor = db.cursor()
- try:
- sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
- LAST_NAME, AGE, SEX, INCOME)
- VALUES ('zhen', 'peng', 20, 'M', 2000)"""
- cursor.execute(sql)
- db.commit()
- except:
- db.rollback()
- finally:
- db.close()
另外一种形式,传参数:
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
('zhen', 'peng', 20, 'M', 2000)
con.execute('insert into Login values("%s", "%s")' % \
(user_id, password))
2.3查询
fetchone()
fetchall()
rowcount
- import MySQLdb
- db = MySQLdb.connect("localhost","pzdn","pzdn","testdb" )
- print db
- cursor = db.cursor()
- try:
- sql = "SELECT * FROM EMPLOYEE \
- WHERE INCOME > '%d'" % (1000)
- cursor.execute(sql)
- result =cursor.fetchall()
- for row in result:
- fname = row[0]
- lname = row[1]
- age = row[2]
- sex = row[3]
- income = row[4]
- print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
- (fname, lname, age, sex, income )
- except Exception, e:
- print e.message
- finally:
- db.close()
3.文件和目录IO
3.1文件打开模式
模式 | 描述 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
常用:r+,w+,a+,其中r+与w+等价。a+为append,w+为覆盖。带有b的,表示读取方式为二进制。
3.2从键盘输入
raw_input("read a line from console:") #read line
input("please ensure the input is python expression") #must be Python expression
3.2文件访问方法
open()
read()
write()
close()
以及os的rename(),remove()
- file = open("testfile.txt","r+")
- print 'read tens:',file.read(10)
- for line in file:
- print line
- print 'display the file info:'
- print file.mode,file.name
- file.write("pz is learning the python language!\n")
- file.close()
- print file.closed
- import os
- os.rename(file.name,file.name+"2")
3.3目录访问方法
这差不多就是Linux的目录管理命令
mkdir()
removedires()
getcwd()
chdir()
rmdir(path)
listdir(path)
import os dirName = "newdir"
os.removedirs(dirName) os.mkdir(dirName) print os.getcwd() os.chdir(dirName) print os.getcwd() |