Pytohon中的模塊部分、異常、斷言及數據儲存-josn

一.模塊

Python本身就內置了很多非常有用的模塊,只要安裝完畢,這些模塊就可以立刻使用。

__name__屬性
__name__屬性可以做到,測試模塊的代碼只在測試情況下被運行,而在被導入時不會執行
    __name__是python的一個內置屬性,記錄着一個字符串
    如果是被其他文件導入時,__name__就是模塊名
    如果是當前執行的程序,__name__就是__main__

# 全局變量,函數,類 直接執行的代碼不是向外界提供的工具
def say_hello():
    print 'hello hello'

#print 'have a nice day!'
# 如果直接在模塊中輸入,得到的是__main__
if __name__ == '__main__':
    print __name__
# 文件被導入的時候,能夠直接被執行的代碼不需要被執行
    print 'lily 開發的程序'
    say_hello()

# 在導入模塊時,每個導入應獨佔一行

import test1
import test2

test1.say_hello()
test2.say_hello()

dog = test2.Dog()
print dog

cat = test1.Cat()
print cat

# 使用as指定模塊的別名(大駝峯命名法)

import test1 as CatModule
import test2 as DogModule

DogModule.say_hello()
CatModule.say_hello()

dog = DogModule.Dog()
print dog
cat = CatModule.Cat()
print cat

示例導入模塊

from test1 import Cat
from test2 import say_hello
from test1 import say_hello as test1_say_hello

say_hello()
test1_say_hello()
miaomiao = Cat()

**python的解釋器在導入模塊的時候,會:
1.搜索當前目錄指定的模塊文件,如果有就直接導入
2.如果沒有,再搜索系統目錄
注意:在開發時,給文件起名,不要和系統模塊文件重名**

示例二

import random
rand = random.randint(0,10)
print rand

在很多python文件中會看到以下格式的代碼

# 導入模塊
# 定義全部變量
# 定義類
# 定義函數

#在代碼的下方

def main():
    pass

if __name__ == '__main__'
    main()    在導入的.py文件中,輸出是   文件名import test

二.異常

在程序開發中,如果對某些代碼的執行不確定(程序的語法完全正確)
可以增加try來捕獲異常

try:
    嘗試執行的代碼
except:
    出現錯誤的處理

示例一

try:
    num = int(raw_input('請輸入一個整數:'))
except:
    print '請輸入正確的整數'

# 無論是否輸入錯誤額,程序都會正常得執行
print '*' * 50

當python解釋器拋出異常時,最後一行錯誤信息的第一個單詞,就是錯誤類型

# 1.提示用戶輸入一個整數
# 2.使用8除以用戶輸入的整數並且輸出
try:
    num = int(raw_input('請輸入一個整數:'))
    result = 8 / num
    print result
except ZeroDivisionError:
    print '除0錯誤 0不能做除數'
except ValueError:
    print '請輸入正確的整數'


# 1.輸入的不是數字
# 2.0不能做除數

捕獲未知錯誤:
在開發的時候,要判斷所有可能出現的錯誤,是有一定難度的
如果希望程序無論出現任何錯誤,都不會因python解釋器拋出異常而終止
可以再增加一個except

try:
    num = int(raw_input('請輸入一個整數:'))
    result = 8 / num
    print result
#except ZeroDivisionError:
#    print '除0錯誤 0不能做除數'
except ValueError:
    print '請輸入正確的整數'
# 捕獲未知異常
# result:一個變量名,可以隨便起名
except Exception as result:
    print '未知錯誤額 %s' % result

try:
嘗試執行的代碼
pass
except 錯誤類型1:
pass
except 錯誤類型2:
pass
except Exception as result:
else:
沒有異常纔會執行的代碼
pass
finally:
無論是否有異常,都會執行的代碼
pass

try:
    num = int(raw_input('請輸入一個整數:'))
    result = 8 / num
    print result
#except ZeroDivisionError:
#    print '除0錯誤 0不能做除數'
except ValueError:
    print '請輸入正確的整數'
# 捕獲未知異常
# result:一個變量名,可以隨便起名
except Exception as result:
    print '未知錯誤額 %s' % result
# 只有在沒有以異常的時候,纔會執行的代碼
else:
    print '嘗試成功!'
# 無論是否有異常,都會執行的代碼
finally:
    print '*************'

異常的傳遞
異常的傳遞–當函數/方法執行出現異常,會將異常傳遞給函數/方法調用的一方
如果傳遞到主程序,依舊沒有異常處理,程序纔會終止,可以在主程序中增加
異常捕獲,而在主函數中調用其他函數,只要出現異常,都會傳遞到主函數的異常
捕獲中,這就不需要在代碼中,增加大量的異常捕獲,能夠保證代碼的整潔

"""
def demo1():
    return int(raw_input('請輸入整數:'))

def demo2():
    return demo1()

# 利用異常的傳遞性,在主程序中捕獲異常
try:
    print demo2()
except Exception as result:
    print '未知錯誤 %s' % result

示例二

def input_passwd():
    # 1.提示用戶輸入密碼
    pwd = raw_input('請輸入密碼')

    # 2.判斷密碼的長度 >-=8,就返回用戶輸入的密碼
    if len(pwd) >= 8:
        return pwd
    # 3.<8,主動拋出異常
    # print '主動拋出異常'
    # 1.創建異常對象(可以添加錯誤信息)
    ex = Exception('密碼長度不夠')
    raise ex


# 注意:只拋出異常而不捕獲異常,代碼會錯出
try:
    print input_passwd()
except Exception as result:
    print result
# 先創建異常對象,再拋出異常,再在主函數中捕獲異常

三.斷言

斷言:可以理解爲提前預言,讓人更好的知道錯誤原因

"""
def func(num,div):
    assert (div != 0),'div不能爲0'
    return num / div

print func(10,0)

四.數據儲存 –json

很多程序都要求用戶輸入某種信息,
程序都把用戶提供的信息存儲在列表和字典等數據結構中,
用戶關閉程序時,你幾乎總是要保存他們的信息:
一種簡單的方式是使用模塊json來存儲數據
(在python中使用json的時候,主要也就是使用json模塊,json是以一種良好的格式來進行數據的交互)
模塊json讓你能夠將簡單的Python數據結構轉存到文件中,
並在程序再次運行時加載該文件中的數據,
你還可以使用json在Python程序之間分享數據,
更重要的是,json數據格式並非Python專用的,
這讓你能夠將以json格式存儲的數據與使用其他編程語言的人分享

注意:json(javascriptObject notation)格式最初是爲javascript開發的,但隨後成了一種常見格式,
被包括python在內的衆在這裏
**

這裏會用到兩個.json文件 這兩個文件名一個是numbers.json username.json

**

import json
number = [1,2,3,4]

with open('numbers.json','w') as f_obj:
    # 我們使用函數json.dump()將數字列表存儲到文件中
    json.dump(number,f_obj)
import json
filename = 'numbers.json'
with open(filename) as f_obj:
    # 我們使用函數json.load加載存儲在numbers.json中的信息
    # 並將其存儲到變量numbers中
    numbers = json.load(f_obj)
print numbers

import json
username = raw_input('what is your name ?')
filename = 'username.json'
with open(filename,'a') as f_obj:
    json.dump(username,f_obj)
    print 'We will rember you when you come back, %s' % username
import json

filename = "username.json"
with open(filename) as f_obj:
    username = json.load(f_obj)
    print "Welcome back, %s" % username

如果以前存儲了用戶,就顯示
否則,就提示用戶輸入用戶名並存儲它

"""
import json
filename = "username.json"
try:
    with open(filename) as f_obj:
        username = json.load(f_obj)
except ValueError:
    username = raw_input("What is you name? ")
    with open(filename,"w") as f_obj:
        json.dump(username,f_obj)
        print "We'll remember you when you come back %s" % username
#依賴於try代碼塊成功執行的代碼都應放到else代碼塊中:
else:
    print "Welcome back %s " % username
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章