第13次全天課筆記 20181021 異常
20181021
#程式碼統計工具
1 通過引數指定一個絕對路徑,sys.argv
2 如果是檔案,就直接統計檔案的行數,並列印結果
3 判斷一下是否為目錄,就遍歷,統計
找到這個目錄下所有的檔案,用os.walk可以找到,拼成絕對路徑。
規則:
一種是開頭是#encoding #-*-
還有一種是''' 或者""",判斷某幾行是'''或者"""開頭,並且是'''或者"""
結尾
空行
兩個變數:一個是統計當前檔案的行數,還有累計行數
每個檔案的路徑和程式碼行,我想到存到字典
import os
import sys
import os.path
#for i in sys.argv:
# print (i)
def count_file_lines(file_path):
line_count = 0
flag =True
try:
fp = open(file_path,"r",encoding="utf-8")
encoding_type="utf-8"
fp.close()
except:
encoding_type="gbk"
with open(file_path,"r",encoding=encoding_type) as fp:
for line in fp:
if line.strip() == "":
continue
else:
if line.strip().endswith("'''") and flag == False:
flag = True
continue
if line.strip().endswith('"""') and flag == False:
flag = True
continue
if flag == False:
continue
if line.strip().startswith("#encoding") \
or line.strip().startswith("#-*-"):
line_count += 1
elif line.strip().startswith('"""') and line.strip().endswith('"""') and line.strip() != '"""':
continue
elif line.strip().startswith("'''") and line.strip().endswith("'''") and line.strip() != "'''":
continue
elif line.strip().startswith("#"):
continue
elif line.strip().startswith("'''") and flag == True:
flag = False
continue
elif line.strip().startswith('"""') and flag == True:
flag = False
continue
else:
line_count += 1
return line_count
def count_code_lines(path,file_types=[]):
if not os.path.exists(path):
print("您輸入的目錄或者檔案路徑不存在")
return 0
line_count =0
file_lines_dict ={}
if os.path.isfile(path):
#print("path:",path)
file_type = os.path.splitext(path)[1][1:]
#print(file_type)
#print (file_type in file_types)
if len(file_types)==0:
file_types=["py","cpp","c","java","ruby","ini","go","html","css","js","txt","vbs","php","asp","sh"]
if file_type in file_types:
line_count=count_file_lines(path)
return line_count
else:
file_path = []
for root, dirs,files in os.walk(path):
for file in files:
file_path.append(os.path.join(root,file))
for f in file_path:
file_type = os.path.splitext(f)[1][1:]
if len(file_types)==0:
file_types=["py","cpp","c","java","ruby","ini","go","html","css","js","txt","vbs","php","asp","sh"]
if file_type not in file_types:
continue
print (f)
line_num=count_file_lines(f)
line_count+=line_num
file_lines_dict[f]= line_num
return line_count,file_lines_dict
if __name__ == "__main__":
print (sys.argv)
if len(sys.argv) <2:
print ("請輸入待統計行數的程式碼絕對路徑!")
sys.exit()
count_path = sys.argv[1]
file_types = []
if len(sys.argv) >2:
for i in sys.argv[2:]:
file_types.append(i)
print (count_path,file_types)
#print(count_code_lines(count_path,file_types))
print(count_file_lines("e:\\b.py"))
測試的檔案a.py:
#encoding=utf-8
import a
"""sddsdsf"""
'''sdfdsfd'''
'''sddsfds
sdfdsf
sdfdsf
sdfdss'''
"""sddsfds
sdfdsf
sdfdsf
sdfdss"""
print(1)
print(1)
print(1)
杜拉拉昇職記
專訪雷果國:從1.5K到18K 一個程式設計師的5年成長之路
https://www.csdn.net/article/2013-05-13/2815252
績效考核:
法制:kpi
1、缺陷密度、遺漏缺陷率、
專案過程符合率(時間進度)
2、線上bug數(和漏測一樣)
3、有多少專案延期(這要看和測試是否有關係)
4、為專案出了什麼好的建議明顯提升了人效
(經驗分享)
自動化有啥成績
效能有啥成績
安全測試
引入新的工具
你的能力是否有提升
5、成就客戶做了哪些
不考核
6、當月所做專案 權重 完成度
開發滿意度:
測試滿意度:
專案經理打分
7、評定內容:學習能力,團隊精神
每個人的指標個性化:主管、經理
8、專案交付率
9、版本交付數
10、360打分
主管主觀打分:
1 遵守規章制度
2 是否主動
抱好大腿。
職場生存三原則:
1 聽話
2 能幹
3 擺正自己位置
總結:知己知彼,做到最好的自己,滿足kpi得分,
然後一定要抱好大腿。
播測:指令碼失敗,發郵件,可能服務掛了
異常
>>> try:
... int("1.1")
... except ValueError:
... print("should input base 10")
... except:
... print("sth wrong")
...
should input base 10
try不能單獨存在,必須有except或finally。
>>> try:
... with open("e:\\rrr.txt") as f:
... pass
... except IOError:
... print("io error")
... except:
... print("sth wronf")
...
io error
>>> try:
... 1/0
... except:
... print("value error")
... else:
... print("no error") #else,當沒有異常執行else
...
value error
巢狀try
try:
try:
int("1.1")
except:
print("第二層try的異常出現了")
1/0
except:
print ("第一層try的異常出現了")
程式順序執行,第一個異常被捕獲了,所以繼續執行1/0。
try:
1/0
try:
int("1.1")
except:
print("第二層try的異常出現了")
except:
print ("第一層try的異常出現了")
1/0 就出現了問題,所以不會繼續執行了
#coding=utf-8
try:
fh = open("c:\testfile", "r")
finally:
print ("關閉檔案")
fh.close()
因為找不到檔案,執行finally這個檔案沒開啟。
#coding=utf-8
try:
fh = open("D:\\test.py", "r")
try:
content = fh.read()
print (content)
finally:
print ("關閉檔案")
fh.close()
except IOError:
print ("Error: 沒有找到檔案或讀取檔案失敗")
#coding=utf-8
try:
fh = open("D:\\test.py", "r",encoding="utf-8")
try:
content = fh.read()
1/0
print (content)
finally:
print ("關閉檔案")
fh.close()
except IOError:
print ("Error: 沒有找到檔案或讀取檔案失敗")
except ZeroDivisionError:
print ("1/0 異常出現了!")
#coding=utf-8
try:
fh = open("e:\\axxx.txt", "r",encoding="utf-8")
except IOError as e:
print (e)
except ZeroDivisionError:
print ("1/0 異常出現了!")
#coding=utf-8
try:
fh = open("e:\\axxx.txt", "r",encoding="utf-8")
except (IOError,ZeroDivisionError) as e:
print (e)
except :
print ("1/0 異常出現了!")
同時捕獲多個,用括號放在一起
丟擲異常
raise Exception("Invalid num")
自定義異常1
# coding=utf-8
class WXHerror(RuntimeError):
# 重寫預設的__init__()方法,
# 丟擲特定的異常資訊
def __init__(self, value,value1):
self.value = value
self.value1=value1
# 觸發自定義的異常
try:
raise WXHerror("Bad hostname","hello Error!")
except WXHerror as e:
print ("WXHerror occurred, value:", e.value1)
自定義異常2
#coding=utf-8
class ShortInputException(Exception):
'''A user-defined exception class.'''
def __init__(self, length, atleast):
Exception.__init__(self)
self.length = length
self.atleast = atleast
try:
s = input('Enter something --> ')
if len(s) < 3:
#如果輸入的內容長度小於3,觸發異常
raise ShortInputException(len(s), 3)
except EOFError:
print ('\nWhy did you do an EOF on me?')
except ShortInputException as x:
print ('ShortInputException: The input was of length %d,\
was expecting at least %d' % (x.length, x.atleast))
else:
print ('No exception was raised.')
自定義with異常
class opened(object):
def __init__(self, filename):
self.handle = open(filename)
print ('Resource: %s'% filename)
def __enter__(self):
print ('[Enter %s]: Allocate resource.' % self.handle)
return self.handle # 可以返回不同的物件
def __exit__(self, exc_type, exc_value, exc_trackback):
print ('[Exit %s]: Free resource.' % self.handle)
if exc_trackback is None:
print ('[Exit %s]: Exited without exception.,' % self.handle)
self.handle.close()
else:
print ("error occur!") #控制代碼洩漏
#return True
return False #會丟擲異常,中斷程式的執行
with opened(r'D:\test.py) as fp:
for line in fp.readlines():
print(line)
raise TypeError
print ("Done")
斷言 assert
>>> try:
... assert 1==2
... except AssertionError:
... print("assert fail!")
...
assert fail!
模組:
模組是一個python檔案,包是一個目錄,__init__.py
test1.py
a=1
def add(a,b):
return a+b
class P(object):
value=100
test2.py
import test1
print (test1.a)
print (test1.add(1,2))
print (test1.P.value)
不在一個目錄中
import sys
sys.path.append("d:\\") #把這個被引入的路徑加上,
import sys
sys.path.extend(["d:\\","c:\\"]) #可新增多個
如果都找不到,python會查安裝路徑lib下的site-packages。Unix下,預設路
徑一般是/usr/local/python/。
引入模組
- 相同目錄
- Sys.path
- 放在site-packages下
- 設定一個pythonpath。
from b import * #1這種情況可以省去b.
from b import a,P,add #2這種情況可以省去b.
print (a)
print (add(1,2))
print(P.value)
import XX,xx的檔案都會被執行,除了if __name__ == “__main__”: 裡面的。
if __name__ == “__main__”: #如果這個檔案被匯入,不會被執行
print(“xxx”)
當檔案被引用的時候 __name__ = 檔名,當自己執行時,__name__ =__main__
包: 模組檔案 + __init__.py
from 模組 import 包名
import 模組.包名