diff --git a/0MOOC/README.md b/0MOOC/README.md index 4c4e0274e..c5ed0944c 100644 --- a/0MOOC/README.md +++ b/0MOOC/README.md @@ -1,6 +1,4 @@ -# 0MOOC -~ 此目录收集, 课程进入时的体验 -## 进展 +#Week0:兵马未动粮草先行 +# -- 150924 大妈创建 \ No newline at end of file diff --git a/0MOOC/linux_command_line.md b/0MOOC/linux_command_line.md new file mode 100644 index 000000000..ae0984296 --- /dev/null +++ b/0MOOC/linux_command_line.md @@ -0,0 +1,5 @@ + +# 常用命令 + +> 链接 http://locez.com/Linux/common-command/ + \ No newline at end of file diff --git a/0MOOC/zhun_bei_gong_zuo.md b/0MOOC/zhun_bei_gong_zuo.md new file mode 100644 index 000000000..d54614143 --- /dev/null +++ b/0MOOC/zhun_bei_gong_zuo.md @@ -0,0 +1,25 @@ +# 准备工作 + + +## 生命不息,折腾不止——系统篇 + + * 入班之前就听闻win系统编程不方便,试用几天果不其然,于是,决定装Linux(Ubuntu)。一通折腾,说好的U盘引导安装在我这愣是装不上,誓不罢休,wubi法安装,遂成。种种折磨,就差砸电脑了。 + +* 网上教程很多,但良莠不齐,因为水平差异&脑回路不同有些教程逻辑跳跃,官方Help是大杀器,小白的福利:-D + +## 生命不息,折腾不止——科学上网篇 + +* +不翻墙情况下,试了下Github,可以打开但不流畅,关键是Google&Gmail没法用,不能忍。购买Shadowsocks按照教程安装,Win上可以用各种爽。Ubuntu下配置有点复杂,几经摸索配置妥当就是死活连不上——崩溃(我不是系统)反复检查发现不是设置问题,应该是墙修高了。搜索,发现了一个利器——Lantern,遂用,好使,开心:-D + +* +多巴胺的分泌多寡跟你前期投入多少看来有时候是正相关的 + + + + + + + + + diff --git a/1sTry/211_xiao_ri_ji_ren_wu.md b/1sTry/211_xiao_ri_ji_ren_wu.md new file mode 100644 index 000000000..305a740ad --- /dev/null +++ b/1sTry/211_xiao_ri_ji_ren_wu.md @@ -0,0 +1,46 @@ +# 2.1.1 小日记任务 + +## 任务描述 + +> 完成一个极简交互式日记系统,需求如下: +> * 一次接收输入一行日记 +* 保存为本地文件 +* 再次运行系统时,能打印出过往的所有日 + + +### 挖坑: + 1. 如何向文本添加内容不删除或者覆盖原来内容 + + 2. 读写文件的基础知识 + + 3. 如何每次记录每次写完日记的时间,且在下次打开系统时能展示 + + 4. 文本换行 + + 5.打开系统自动打印之前的所有记录,如果没有这个文件进行创建 + + +### 基本思路: + +>* 代码不只是自己使用,别人第一次运行要确保其能创建一个新的日记文件并且保存 + +> * 所以代码第一部分需要判断有没有这个日记文件,需要用到 os.path.exists()命令进行判断 + +> * 如果存在打开读取文件不存在创建文件使 if 函数,打开读取使用open/read 命令 + +> 代码如下 + +> coding:utf-8 + from sys import argv + import time + import os + script, filename = argv + E = os.path.exists(filename) + if str(E) == 'True': + print txt.read() + else: + print '尚无 %r ---创建之...' % filename + + + +>* 第二大块内容是写入需用 raw_input(). diff --git a/1sTry/README.md b/1sTry/README.md index 0388cd9f3..e4a1f3eb4 100644 --- a/1sTry/README.md +++ b/1sTry/README.md @@ -3,4 +3,4 @@ ## 进展 -- 150924 大妈创建 \ No newline at end of file +- 150924 大妈创 \ No newline at end of file diff --git a/1sTry/help(file).png b/1sTry/help(file).png new file mode 100644 index 000000000..108340918 Binary files /dev/null and b/1sTry/help(file).png differ diff --git a/SUMMARY.md b/SUMMARY.md index 23cbaa094..c604bd974 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,9 +1,17 @@ # Summary -- [教学反转](0MOOC/README.md) -- [基础旋进](1sTry/README.md) -- [迭代作品](2nDev/README.md) -- [人生首秀](3rDemo/README.md) -- [代码 (_src)](_src/README.md) -- [素材 (draft)](draft/README.md) - + [教程该怎么写](draft/how2tutorial.md) -- [有关](ABOUT.md) + +* [Introduction](README.md) +* [随手记](sui_shou_ji.md) + * Python异常处理 + * Python socket network programming +* [1.教学反转](0MOOC/README.md) + * [准备工作](0MOOC/zhun_bei_gong_zuo.md) + * [Linux command line](0MOOC/linux_command_line.md) +* [2. 基础旋进](1sTry/README.md) +* [迭代作品](2nDev/README.md) +* [人生首秀](3rDemo/README.md) +* [代码 (_src)](_src/README.md) +* [素材 (draft)](draft/README.md) + * [教程该怎么写](draft/how2tutorial.md) +* [有关](ABOUT.md) + diff --git a/_src/om2py0w/0wex1/ex b/_src/om2py0w/0wex1/ex new file mode 100644 index 000000000..7791a2e63 --- /dev/null +++ b/_src/om2py0w/0wex1/ex @@ -0,0 +1,13 @@ + +f +---2015-10-25 Sunday 11:14:10 CST +测试2 +---2015-10-25 Sunday 11:21:56 CST +w +---2015-10-25 Sunday 11:27:45 CST +2 +---2015-10-25 Sunday 11:28:51 CST + +---2015-10-25 Sunday 11:29:04 CST +woshi +---2015-10-25 Sunday 14:02:02 CST \ No newline at end of file diff --git a/_src/om2py0w/0wex1/gui/bind.py b/_src/om2py0w/0wex1/gui/bind.py new file mode 100644 index 000000000..e040c1999 --- /dev/null +++ b/_src/om2py0w/0wex1/gui/bind.py @@ -0,0 +1,12 @@ +from Tkinter import * + +root = Tk() + +def callback(event): + print "clicked at", event.x, event.y + +frame = Frame(root, width=100, height=100) +frame.bind("", callback) +frame.pack() + +root.mainloop() \ No newline at end of file diff --git a/_src/om2py0w/0wex1/gui/hello1.py b/_src/om2py0w/0wex1/gui/hello1.py new file mode 100644 index 000000000..85b349e85 --- /dev/null +++ b/_src/om2py0w/0wex1/gui/hello1.py @@ -0,0 +1,8 @@ +from Tkinter import * + +root = Tk() #You should only create one root widget for each program, and it must be created before any other widgets. + +w = Label(root, text="Hello, world!") #create a Label widget as a child to the root window: +w.pack() + +root.mainloop() \ No newline at end of file diff --git a/_src/om2py0w/0wex1/gui/hello2.py b/_src/om2py0w/0wex1/gui/hello2.py new file mode 100644 index 000000000..7e0865b53 --- /dev/null +++ b/_src/om2py0w/0wex1/gui/hello2.py @@ -0,0 +1,26 @@ +from Tkinter import * + +class App: + + def __init__(self, master): + + frame = Frame(master) + frame.pack() + + self.button = Button( + frame, text="QUIT", fg="red", command=frame.quit + ) + self.button.pack(side=LEFT) + + self.hi_there = Button(frame, text="Hello", command=self.say_hi) + self.hi_there.pack(side=LEFT) + + def say_hi(self): + print "hi there, everyone!" + +root = Tk() + +app = App(root) + +root.mainloop() +root.destroy() # optional; see description below \ No newline at end of file diff --git a/_src/om2py0w/0wex1/main.py b/_src/om2py0w/0wex1/main.py index e69de29bb..559d4ebc6 100644 --- a/_src/om2py0w/0wex1/main.py +++ b/_src/om2py0w/0wex1/main.py @@ -0,0 +1,46 @@ +# coding:utf-8 #解决中文字符问题 +from sys import argv +import time #导入time 模块 +import os + +script, filename = argv +E = os.path.exists(filename) #判断filename是否存在 + +if str(E) == 'True': #str 可将数据转化为字符串 + txt = open(filename) #读取内容需先将其打开 + print '这是 %r 的内容:' % filename + print txt.read() # 每次运行自动打印之前的记录 +else: + print '尚无 %r ---创建之...' % filename + + # ---以下输入内容并保存--- + + +print "If you don't want that, hit CTRL-C (^C)." +print "IF you do want this, hit return." + +raw_input('> ') + +print "Opening the file..." +target = open(filename,"a") # 'a' 表示要向文件写入数据,但是添加到当前内容尾部 + + +print "输入新的内容:" + +content = raw_input("line 1: ") + +T = time .strftime('%Y-%m-%d %A %X %Z', time.localtime()) # 显示当下时间 + +print T + +print "I'm going to write these to the file." + +target.write('\n' + content + '\n' + "---"+ T) + + +print "And finally, we close it." +target = open(filename) + +print target.read() +target.close() +# txt.close() # close 能否不用? diff --git a/_src/om2py0w/0wex1/mytkinter.py b/_src/om2py0w/0wex1/mytkinter.py new file mode 100644 index 000000000..3f575b330 --- /dev/null +++ b/_src/om2py0w/0wex1/mytkinter.py @@ -0,0 +1,42 @@ +# coding=utf-8 +from Tkinter import * +import sys +reload(sys) +sys.setdefaultencoding('utf-8') +from jqk_dairy import * + +root = Tk() +root.title("kang's diary")#命名 +root.geometry('400x400')#尺寸 +w = Label(root, text="Welcom to kang's diary", pady=20)#输入框的设置 + +w.pack()#显示输入框 + +var = StringVar(value="What do you want to write today?")#字符变量StringVar跟踪变量值的变化 + +text_input = Entry(root, textvariable=var,width=36) +text_input.pack() + +def print_content(): + append_text(var.get()) + text_output.config(text=get_text()) + var.set('') + +#text_input = Entry(root) +#text_input.insert(0, "Hi, what's up") +#text_input.pack() + +#def print_content(): + #print text_input.get() + #text_input.delete(0,'end') + +button = Button(root, text="print", command=print_content) +button.pack() + +root.bind('', lambda event:print_content()) + +text_output = Message(root, textvariable=var, width=360,pady=20) +text_output.pack() + + +root.mainloop() \ No newline at end of file diff --git a/_src/om2py0w/0wex1/mytkinter2.py b/_src/om2py0w/0wex1/mytkinter2.py new file mode 100644 index 000000000..1b7e9884d --- /dev/null +++ b/_src/om2py0w/0wex1/mytkinter2.py @@ -0,0 +1,37 @@ +# coding=utf-8 + +import sys +reload(sys) +sys.setdefaultencoding('utf-8') + +import Tkinter as tk +from jqk_dairy import * + + +def enter_and_print(event): + append_text(var.get()) + text_output.delete(0.0,'end') + text_output.insert(0.0,get_text()) + var.set('') + + +root = tk.Tk() +root.title("kang's diary") + +var = tk.StringVar(value="What do you want to write today?") + +text_input = tk.Entry(root, textvariable=var, width=36, bd=5) +text_input.pack() + +root.bind('', enter_and_print) + +text_output = tk.Text(root,width=46) +text_output.pack(side='left', fill='y') + +s =tk.Scrollbar(root) +s.pack(side='right', fill='y') + +s.config(command=text_output.yview) +text_output.config(yscrollcommand=s.set) + +root.mainloop() \ No newline at end of file diff --git a/_src/om2py3w/3wex0/c1.py b/_src/om2py3w/3wex0/c1.py new file mode 100644 index 000000000..70c75bcba --- /dev/null +++ b/_src/om2py3w/3wex0/c1.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +import socket +import sys,codecs +reload(sys) +sys.setdefaultencoding('GB2312') #在CMD中运行编码为GB2312,在Python中应修改为UTF-8 + +UDP_IP = "127.0.0.1" +UDP_PORT = 9527 +ip_address = (UDP_IP,UDP_PORT) + + +def main(): + sock = socket.socket(socket.AF_INET, # Internet地址族 + socket.SOCK_DGRAM) # UDP协议 + + print ''' + 欢迎来到*** %s的日记本--******** + 输入‘r’---载入历史记录 + + '''%UDP_IP + MESSAGE = raw_input("写点什么呢:") #一次只能一行内容 + + if MESSAGE == 'r': + print "正在打开日志……" + sock.sendto(MESSAGE,ip_address)#发送信息到服务端 + print sock.recv(1024)#接受服务端回馈的信息 + + else: + sock.sendto(MESSAGE,ip_address) + print "UDP target IP:", UDP_IP + print "UDP target port:", UDP_PORT + print "已发送信息:", MESSAGE + +while 1: + main() \ No newline at end of file diff --git a/_src/om2py3w/3wex0/main_s.py b/_src/om2py3w/3wex0/main_s.py new file mode 100644 index 000000000..d80d884ce --- /dev/null +++ b/_src/om2py3w/3wex0/main_s.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +import socket +import sys,codecs +reload(sys) +sys.setdefaultencoding('GB2312') + +UDP_IP = "127.0.0.1" +UDP_PORT = 5005 + +def server_con(): + sock = socket.socket(socket.AF_INET, # Internet + socket.SOCK_DGRAM) # UDP + sock.bind((UDP_IP, UDP_PORT)) + data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes + print "已接收信息:", data, "来自", addr + + +while True: + server_con() diff --git a/_src/om2py3w/3wex0/server1.py b/_src/om2py3w/3wex0/server1.py new file mode 100644 index 000000000..3e2a0c319 --- /dev/null +++ b/_src/om2py3w/3wex0/server1.py @@ -0,0 +1,29 @@ +# coding:utf-8 +import socket +import sys + + +host = '127.0.0.1' +port = 5678 + +def server_con(): + + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 创建对象 + + s.bind((host, port))#绑定端口 + + s.listen(1)#监听连接 + + + clientSocket,clientAdrr = s.accept()#接受请求 + + print 'Client conneted!' + ip = raw_input() + + clientSocket.sendall(ip)#数据收发(怎么让 client 连续接受?) + data, addr = s.recvfrom(1024) + print "已接受信息:", data, "来自:",addr + + clientSocket.close()#关闭端口 +while True: + server_con() \ No newline at end of file diff --git a/_src/om2py4w/4wex0/client/jclient.py b/_src/om2py4w/4wex0/client/jclient.py new file mode 100644 index 000000000..f7de9e7fc --- /dev/null +++ b/_src/om2py4w/4wex0/client/jclient.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +#-*- coding: utf-8 -*- +import requests #requests 使用说明http://docs.python-requests.org/en/master/ +from bs4 import BeautifulSoup #beautifulsoup :https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ + +def main(): + print 'Type "q" or "quit" to exit.' + print 'Type "l" or "list" to view all the notes.' + print 'Type anything else as a new note.' + + while True: + INPUT = raw_input('$ ').strip()#$是输入前的指示符,strip()消除字符两端的空格 + inp = INPUT.lower()#大写转小写 + if inp in ['quit','q']:#设置关键词 + break + elif inp in ['list','l']:#设置关键词 + print listnotes() + else: + addnote(INPUT) + + +def addnote(note): + requests.post('http://localhost:8080/note', data = {'newnote':note}) + print 'note added!' + +def listnotes(): + r = requests.get('http://localhost:8080/note') + soup = BeautifulSoup(r.text, 'html.parser') + lis = soup.find_all('p') + notes = '' + for i in lis: + notes += i.get_text()+'\n' + return notes + +if __name__ == '__main__': + main() + diff --git a/_src/om2py4w/4wex0/hallo.py b/_src/om2py4w/4wex0/hallo.py new file mode 100644 index 000000000..38ef6080d --- /dev/null +++ b/_src/om2py4w/4wex0/hallo.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +from bottle import * +@route('/') +def index(): + return 'Hallo World!' +run(host='127.0.0.1', port=8082,reloader=True) + diff --git a/_src/om2py4w/4wex0/server/jnote.py b/_src/om2py4w/4wex0/server/jnote.py new file mode 100644 index 000000000..6c2ab11c4 --- /dev/null +++ b/_src/om2py4w/4wex0/server/jnote.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# SQLite 数据库版 +from os.path import exists +import sqlite3 +from datetime import datetime + +dbfilename = "webnotes.db" + +def NewNote(note): + con = sqlite3.connect(dbfilename) + time = str(datetime.now())[:19] # 去掉秒数的小数部分 + with con: + cur = con.cursor() + cur.execute("CREATE TABLE IF NOT EXISTS Notes(Id INTEGER PRIMARY KEY, Time TEXT, Content TEXT)") + cur.execute("INSERT INTO Notes(Time, Content) VALUES(?,?)", (time, note)) + +def GetNotes(): # 返回全部笔记的列表 + if exists(dbfilename): + con = sqlite3.connect(dbfilename) + allnotes = [] + with con: + con.row_factory = sqlite3.Row + cur = con.cursor() + cur.execute("SELECT * FROM Notes") + rows = cur.fetchall() + for row in rows: + allnotes.append('%s %s' % (row['Time'], row['Content'])) + return allnotes + else: + return ['No data on server'] \ No newline at end of file diff --git a/_src/om2py4w/4wex0/server/jserver.py b/_src/om2py4w/4wex0/server/jserver.py new file mode 100644 index 000000000..eca264556 --- /dev/null +++ b/_src/om2py4w/4wex0/server/jserver.py @@ -0,0 +1,26 @@ +#/usr/bin/env python +# -*- coding: utf-8 -*- + +from bottle import get, post, request, run, jinja2_view +#import sae.kvdb +from datetime import datetime +import jnote + +@get('/note') +@jinja2_view('jnote.html') +def ShowPage(): + notes = jnote.GetNotes() + return {'notes':notes} + +@post('/note') +@jinja2_view('jnote.html') +def CreatNote(): + note = unicode(request.forms.get('newnote'),'utf-8') + + if note: + jnote.NewNote(note) + notes = jnote.GetNotes() + + return {'notes': notes} + +run (host='127.0.0.1', port=8080, debug=True, reloader=True) diff --git a/_src/om2py4w/4wex0/server/views/jnote.html b/_src/om2py4w/4wex0/server/views/jnote.html new file mode 100644 index 000000000..0984b9dd8 --- /dev/null +++ b/_src/om2py4w/4wex0/server/views/jnote.html @@ -0,0 +1,96 @@ + + + + + + + + + + + Easynote-WEB + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+ {% for note in notes %} +

{{note}}

+ {% endfor %} +
+ +
+ + + + + + + + + + \ No newline at end of file diff --git a/_src/om2py4w/README.md b/_src/om2py4w/README.md index a2a1c659a..1a3ffaab0 100644 --- a/_src/om2py4w/README.md +++ b/_src/om2py4w/README.md @@ -5,4 +5,11 @@ - 私人笔记: + SAE 发布服务 + web 页面端口 - + 用户认证 \ No newline at end of file + + 用户认证 + +- 任务: + + 没错运行合理打印出过往所用的笔记 + + 一次接收一行笔记 + + 在服务端保存为文件 + + + 同时兼容 3w 的 Net 版本的命令行界面进行交 \ No newline at end of file diff --git a/book.json b/book.json index df19e9765..cd1277094 100644 --- a/book.json +++ b/book.json @@ -1,13 +1,8 @@ -{"title": "开智学院 编程课程 Python 入门班 私人教程模板", - "version": "15.9.18,2020", - "description": "OMOOC.py tutorial for teching", - "author": "OMOOC-support ", - - "plugins": [ - "disqus" - ], +{ + "plugins": ["disqus"], "pluginsConfig": { - "shortName": "Openmindclub" - } -} - + "disqus": { + "shortName": "jqk" + } + } +} \ No newline at end of file diff --git a/cover.jpg b/cover.jpg new file mode 100644 index 000000000..961ec7a74 Binary files /dev/null and b/cover.jpg differ diff --git a/python_socket_network_programming.md b/python_socket_network_programming.md new file mode 100644 index 000000000..5b981bb9a --- /dev/null +++ b/python_socket_network_programming.md @@ -0,0 +1,3 @@ +# Python socket network programming + +](http://pythontips.com/2013/08/06/python-socket-network-programming/) \ No newline at end of file diff --git a/sui_shou_ji.md b/sui_shou_ji.md new file mode 100644 index 000000000..ba0ebea36 --- /dev/null +++ b/sui_shou_ji.md @@ -0,0 +1,126 @@ +# 随手记 + +try +捕获由Python或程序本身引发的异常 +raise +手工地引发一个异常 +为什么要使用异常 + +错误处理,当python检查以程序运行时的错误就引发异常,你可以在程序里捕捉和处理这些错误,或者忽略它们。 +事件通知,异常也可以作为某种条件的信号,而不需要在程序里传送结果标志或显式地测试它们。 +特殊情形处理,有时有些情况是很少发生的,把相应的处理代码改为异常处理会更好一些。 +奇特的控制流,异常是一个高层次的"goto",可以把它作为实现奇特的控制流的基础。如反向跟踪等。 +异常的基础知识 + +python的try语句有两种风格---一种是处理异常(try/except/else),一种是无论是否发生异常都将执行最后的代码(try/finally)。 + +try/except/else风格 + + try: + <语句> #运行别的代码 + except <名字>: + <语句> #如果在try部份引发了'name'异常 + except <名字>,<数据>: + <语句> #如果引发了'name'异常,获得附加的数据 + else: + <语句> #如果没有异常发生 + +try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。 + +如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。 +如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。 +如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。 +try/finally风格 + + try: + <语句> + finally: + <语句> #退出try时总会执行 + raise + +python总会执行finally子句,无论try子句执行时是否发一异常。 + +如果没有发生异常,python运行try子句,然后是finally子句,然后继续。 +如果在try子句发生了异常,python就会回来执行finally子句,然后把异常递交给上层try,控制流不会通过整个try语句。 +当你想无论是否发生异常都确保执行某些代码时,try/finally是有用的。 + +raise + +要引发异常,你需要写raise语句,它的形式很简单,raise后面跟着要引发的异常。 + + raise #手工地引发异常 + raise , #传递一个附加的数据 + +什么是异常名(name)呢?它也许是内置作用域内的内置异常(如IndexError),或者是你程序中的任意字符串对象。 + +缺省行为:显示错误信息。 + + $ python test.py + Traceback (innermost last): + File "test.py", line 3, in ? + a = 1 /0 + ZeroDivisionError: integer division or modulo + +当一个未捕获的异常发生时,python将结束程序并打印一个堆栈跟踪信息,以及异常名和附加信息。 + +用try捕获内置异常 + +如果你不想在异常发生时结束你的程序,只需在try里捕获它。 + + #!/usr/bin/python + try: + a = 1 /0 + print a + except: + print 'i get the error' + +当程序运行是会捕获一个错误并执行except后面的代码。 + +异常的惯用法 + +异常并不总是坏事情,例如,文件对象的read方法在文件尾时返回一个空串,python也提供一个内置函数raw_input,它从标准输入流读入。与read方法不同,当遇到文件尾时,raw_input()引发内置的EOFError错误。所以可以这样用: + + while 1: + try: + line = raw_input() #从stdin读入行 + except EOFError: + break #在文件末尾退出循环 + esle: + # 其它处理代码 + +用异常传递成功的信号 + + Found = 'item found' + def search(): + 引发或返回Found + try: + search() + except Found: + successful + else: + fail + +可以使用try来调试代码,你可以用自已的异常处理替换python缺省的异常处理。把整个程序封装在一个外部try里面,你可以捕获运行时的任何异常。 + +异常捕获模式 + + try语句子句形式表 + except: 捕获所有异常 + except name: 只捕获特定的异常 + except name,value: 捕获异常和它的附加数据 + except (name1,name2): 捕获任何列出的异常 + else: 如果没有异常 + finally: 总是执行 + +捕获多个异常中的一个,python从上到下地查看except子句,括号里列出多个异常与列出单独的异常是一样的,只是更简洁一些。 + +运行时嵌套的异常,python会匹配最近的except。 + +finally子句无论如何都会执行,所以它是做清除动作的好地方,如关闭一个文件的操作。 + +捕捉所有异常 + +try: + # 你的代码 +except BaseException, e: + print(str(e))