異常處理和正規表示式

2021-08-04 01:49:34 字數 4500 閱讀 7034

#!/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\_] 更精確地限制了變數的長度是 1­20

個字元;

•a|b 可以匹配 a 或 b

•^\d 表示必須以數字開頭

• \d$ 表示必須以數字結束

#######判斷郵件名是否合法##### #!/usr/bin/env python

#coding:utf-8

_author_ = 'hxr'

import re

r= r'\w+@.+[\.cn|\.com]$'  ##規則的定義,實現判斷郵件名稱是否合法

s='[email protected]'

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...