#!/usr/bin/env python
#coding:utf-8
_author_ = 'hxr'
##python的異常處理機制,try ... expect.... finally.... try: ##用來把可能存在異常的**放在該語句塊中
print 'starting...'
li=[1,2,3]
dic=
print dic['hello']
print li[3]
print a ##nameerror
except baseexception,e : ##不確定錯誤種類是哪種,使用父類方法來捕獲異常
print e
# except indexerror: ##捕獲指定的異常,如果異常為indexerror,則執行下面的語句
# print 'index out of list length'
# except nameerror:
# print 'name is not define'
else: ##沒有任何異常則執行下面的語句
print 'no error'
finally: ##無論是否存在異常,均會執行以下語句
print 'end...'
####函式中出現的異常 def fun1(s):
return fun2(s)*2
def fun2(s):
return 10/s
def main():
try:
print fun1('10')
except baseexception,e: ##錯誤型別為typeerror
print e
main()
執行結果:
unsupported operand type(s) for /: 'int' and 'str'
####將異常寫入檔案中 import logging ##匯入模組(將錯誤寫入到對應檔案中)
logging.basicconfig(filename='err.log') ##建立對應檔案
def fun1(s):
return fun2(s)*2
def fun2(s):
return 10/s
def main():
try:
print fun1('10')
except exception as e:
logging.exception(e) ##將錯誤資訊寫入檔案中
print e
main()
####自定義錯誤型別 class myerror(baseexception): ##自定義的錯誤型別
pass
def fun1(s):
return fun2(s)*2
def fun2(s):
return 10/int (s)
def main():
try:
print fun1('0')
except zerodivisionerror as e:
raise myerror ##更改錯誤名稱
print e
main()
####除錯 -print 列印出你認為可能出錯的變數
-assert 斷言,格式
assert 變數名==值[不符合預設條件時執行的語句]
def foo(s):
n = int(s)
return 10 / n
assert foo(5) == 1 ##錯誤就結束,正確就接著執行
print 'hello'
####記錄錯誤資訊級別並輸出到檔案中 import logging
##debug ,info,warning,error 指定記錄資訊的級別
logging.basicconfig(filename='logging.log',level=logging.warning)
def foo(s):
n = int(s)
logging.info('n=%d'%n) ##對應級別寫入檔案中
logging.warning('n=%d,,,,,warn'%n)
return 10 / n
def main():
foo('10')
main()
####pdb 除錯方法
在命令列中執行
python -m pdb error.py ##進入除錯
n(下一步,單步執行)
p 變數名 (檢視變數)
q(退出)
c(繼續執行,直到遇到斷點)
####pdb斷點除錯
import pdb
n=1print n
pdb.set_trace() ##設定斷點
print 'hello'
pdb.set_trace() ##設定斷點
print 'world'
s=2print s
在命令列中執行
python error.py ##進入除錯
基本模式
• 字面模式: 就是字面長量,就代表其本身
• . 匹配任何字元
• \w 匹配乙個單詞(字母,數字) \w 匹配非字母
• \s 匹配空白 \s 匹配非空白字元
• \d 匹配數字
• ^ 開頭 $ 結尾
• \ 轉義字元
次數的匹配
次數的匹配 , 匹配其前面的字元出現的次數 :
• * 0 次或多次
• + 一次或多次
• ? 零次或一次
• 出現 n 次
• 出現 m 到 n 次
中括號• 中括號用於指向乙個字元集合
• 中括號可以使用元字元
• 中括號中的. 表示其字面意思
[a-z] [a-z] [0-9] [a-za-z]
• [0-9a-za-z\_] 可以匹配乙個數字、字母或者下劃線;
• [0-9a-za-z\_]+ 可以匹配至少由乙個數字、字母或者下劃線組成的字
符串;• [a-za-z\_][0-9a-za-z\_] 更精確地限制了變數的長度是 120
個字元;
•a|b 可以匹配 a 或 b
•^\d 表示必須以數字開頭
• \d$ 表示必須以數字結束
#######判斷郵件名是否合法##### #!/usr/bin/env python
#coding:utf-8
_author_ = 'hxr'
import re
r= r'\w+@.+[\.cn|\.com]$' ##規則的定義,實現判斷郵件名稱是否合法
print re.findall(r,s)
r1=r'^[0-9]\-[0-9]' ##規則,判斷**號碼是否合法
s='029-1234567'
print re.findall(r1,s)
• re.match(p,text) :p 為正規表示式模式, text 要查詢的字串,會返回乙個match 物件
• re.search(p,text) : 只要在 text 中匹配到了 p 就返回,只返回第乙個匹配到的
• re.findall(p,text) :將能匹配上的全返回,會返回乙個 list
• re.split(p,text) : 按照 p 匹配,並且以匹配到的字元為分隔符切割 text, 返回乙個切割後的 list
• re.sub(p,s,text) : 替換,將 p 匹配到的字元替換為 s.
• pattern = re.compile(p) 先編譯 p 模式,當正規表示式模式比較複雜的時候,會先編譯,然後再使用
#########獲取網頁上的 #!/usr/bin/env python
#coding:utf-8
_author_ = 'hxr'
import re
import urllib,urllib2
try: ##檢測異常
python處理異常 日誌以及正規表示式
異常捕獲 高階語言通常都內建了一套try except finally 的錯誤處理機制,python也不例外。而且只要在合適的層次去捕獲錯誤就可以了。def foo s return 10 int s defbar s return foo s 2 defmain try bar 0 except ...
正規表示式相關 正規表示式處理html內容
前面關於顯示html文字用了瀏覽器控制項來處理 這個不過是為了解決燃眉之急不得已才使用。其實最好還是使用正規表示式處理,也就是自己寫乙個html文字直譯器,當然這個實現起來也是不容易的,首先你得將所有html文字標籤羅列出來,然後一一翻譯。下面先搞乙個簡單的例子吧。public static str...
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...