1. 程式人生 > >第13次全天課筆記 20181021 異常

第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/。

 

引入模組

  1. 相同目錄
  2. Sys.path
  3. 放在site-packages下
  4. 設定一個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 模組.包名