欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Python中的異常和JSON讀寫數(shù)據(jù)的實現(xiàn)

 更新時間:2020年02月27日 10:03:11   作者:大坑水滴  
今天小編就為大家分享一篇淺談Python中的異常和JSON讀寫數(shù)據(jù)的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

異常可以防止出現(xiàn)一些不友好的信息返回給用戶,有助于提升程序的可用性,在java中通過try ... catch ... finally來處理異常,在Python中通過try ... except ... else來處理異常

一、以ZeroDivisionError為例,處理分母為0的除法異常

def division(numerator,denominator):
  result=numerator/denominator
  return result
    
ret1=division(1,5)
print(ret1)

ret2=division(1,0)
print(ret2)

1/5執(zhí)行正常,輸出0.2,但1/0,分母為0,拋出Traceback,該信息看起來非常不友好,try .. except可以獲取這些異常信息,并且允許轉(zhuǎn)換為用戶可讀性較好的提示。

def division(numerator,denominator):
  try:
    result=numerator/denominator
    return result
  except ZeroDivisionError:
    return "denominator can not be zero"
  except BaseException:
    return "pls check if the numerator and denominator is number."
  else:
    return "unknow error"
      
ret1=division(1,5)
print(ret1)

ret2=division(1,0)
print(ret2)

1/5正常計算,1/0提示“denominator can not be zero”,這個信息就比較友好,可讀性強(qiáng)。

一開始,我在這里犯了一個錯誤,在try塊中沒有返回result,程序輸出了如下結(jié)果

1/5的時候,try塊沒有發(fā)生異常,所以接下來的兩個except都不會進(jìn)入,故就進(jìn)入到了else處,返回了unknow error,所以我們在使用異常時,一定要記得返回

如果在換一種方式,是否也可以正常返回結(jié)果

def division(numerator,denominator):
  try:
    result=numerator/denominator
  except ZeroDivisionError:
    result = "denominator can not be zero"
  except BaseException:
    result = "pls check if the numerator and denominator is number."
  else:
    result = "unknow error"
  return result
    
ret1=division(1,5)
print(ret1)

ret2=division(1,0)
print(ret2)

結(jié)果也和預(yù)期不一致,所以在使用異常處理時,如果方法中有返回值,則一定要記得在try塊中也返回結(jié)果,如果try塊中執(zhí)行正常,異常處理在try執(zhí)行結(jié)束后結(jié)束,不再向下執(zhí)行。

二、JSON 讀寫數(shù)據(jù)

JSON(JavaScript Object Notation),最開始只有JavaScript語言使用,但由于其優(yōu)良的數(shù)據(jù)格式形式,逐漸被很多編程語言引用,如java中也是用到了JSON,并且有很多對應(yīng)的類庫處理JSON數(shù)據(jù)。Python中對JSON數(shù)據(jù)的讀取和保存可以使用json.load()和json.dump()方法.

json.dump方法接收兩個參數(shù),第一個參數(shù)為要保存的json數(shù)據(jù),第二個數(shù)據(jù)為打開的文件對象,使用時注意順序。

json.load方法接收一個文件對象作為參數(shù)

另外json還存在很多其他的方法,比如json.dumps將python數(shù)據(jù)類型進(jìn)行json格式編碼,可以簡單理解為將列表/字典轉(zhuǎn)換為json字符串,json.loads與json.dumps剛好相反,將json字符串轉(zhuǎn)換為列表/字典

如當(dāng)用戶登錄后,讓其輸入名稱,然后根據(jù)json文件中是否存在該用戶給出不同的提示

1、JSON寫入

import json
filename="myjson.json"
with open(filename,'w') as wr:
  json.dump([1,2,3,4],wr)

2、JSON讀取

import json
filename="myjson.json"
with open(filename) as re:
  ls=json.load(re)


print(ls)

json讀取時,文件必須存在,且不能為空,且內(nèi)容格式要符合json規(guī)范

文件內(nèi)容為空以及不符合json格式規(guī)范,都會出現(xiàn)如下異常

3、使用JSON讀取實現(xiàn)一個簡單的需求

用戶首次登陸,提示歡迎信息,并將其登錄信息記錄到以SON格式保存到文件中,當(dāng)該用戶下次登錄后,將顯示歡迎回來,并且提示其上次登錄時間。輸入quit退出程序

import json
import os
import time
import sys
import traceback
def login():
  json_file="./username.json"
  while(True):
    name=input("pls input your name: ")
    if "quit" == name:
      sys.exit(0)
    curr_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    user_dict_list=[]
    if os.path.exists(json_file):
      with open(json_file) as jf:
        try:
          # 文件內(nèi)容為空,或者文件內(nèi)容,或者不符合json格式,所以此處添加異常處理
          user_dict_list=json.load(jf)
          isExist=False
          for ele in user_dict_list:
            username=ele.get("username")
            if username == name:
              isExist=True
              ele["lastLoginTime"]=curr_time
              print ("welcome back: %s, last login : %s"%(name,curr_time))
              break;
        
          if isExist == False:
            # 文件存在,且內(nèi)容格式正確,但不存在當(dāng)前用戶
            first_login(user_dict_list,name,curr_time)
        except Exception:
          # 打印出異常信息,便于調(diào)測程序,正式使用事可以去掉,或者打印在后臺,不給用戶看到
          traceback.print_exc()
          #文件內(nèi)容為空,或者文件內(nèi)容格式不符合JSON要求
          first_login(user_dict_list,name,curr_time)
    else:
      # 文件不存在
      first_login(user_dict_list,name,curr_time)
    # 將用戶信息寫入/重新寫入到文件中
    with open(json_file,'w') as jf:
      json.dump(user_dict_list,jf)
    
''' 將用戶第一次登陸信息存放到集合中 '''
def first_login(user_dict_list,name,curr_time):
  my_dict={"username":name,"lastLoginTime":curr_time}
  user_dict_list.append(my_dict)
  print ("welcome: %s, have a nice day."%(name))
  
login()

輸入zhangsan和lisi,由于都是第一次登陸,所以打印出歡迎信息,再次數(shù)次zhangsan,由于其已經(jīng)登錄過,故其名稱和上次登錄時間已經(jīng)被記錄下來,再次登錄,打印出歡迎回來,及上次登錄時間,輸入quit退出程序。由于開發(fā)環(huán)境已經(jīng)設(shè)置了UTF-8編碼,輸入中文也是支持的

以上這篇淺談Python中的異常和JSON讀寫數(shù)據(jù)的實現(xiàn)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python中關(guān)于decimal使用出現(xiàn)的一些問題

    python中關(guān)于decimal使用出現(xiàn)的一些問題

    這篇文章主要介紹了python中關(guān)于decimal使用出現(xiàn)的一些問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • python使用logging模塊記錄日志的操作

    python使用logging模塊記錄日志的操作

    在編寫?Python?程序時,日志記錄是一個非常重要的部分,日志不僅幫助你在開發(fā)過程中調(diào)試代碼,還可以在程序正式運(yùn)行時提供診斷信息,幫助定位問題,在本文中,我們將介紹?Python?的?logging?模塊,幫助你了解如何使用這個模塊來記錄和管理日志,需要的朋友可以參考下
    2024-10-10
  • python實現(xiàn)給數(shù)組按片賦值的方法

    python實現(xiàn)給數(shù)組按片賦值的方法

    這篇文章主要介紹了python實現(xiàn)給數(shù)組按片賦值的方法,實例分析了Python在指定位置進(jìn)行賦值的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • Python使用time模塊實現(xiàn)指定時間觸發(fā)器示例

    Python使用time模塊實現(xiàn)指定時間觸發(fā)器示例

    這篇文章主要介紹了Python使用time模塊實現(xiàn)指定時間觸發(fā)器,結(jié)合實例形式分析了Python時間相關(guān)模塊與方法使用技巧,需要的朋友可以參考下
    2017-05-05
  • 使用Python實現(xiàn)博客上進(jìn)行自動翻頁

    使用Python實現(xiàn)博客上進(jìn)行自動翻頁

    這篇文章主要介紹了使用Python實現(xiàn)博客上進(jìn)行自動翻頁,需要的朋友可以參考下
    2017-08-08
  • Python函數(shù)式編程實現(xiàn)登錄注冊功能

    Python函數(shù)式編程實現(xiàn)登錄注冊功能

    這篇文章主要為大家詳細(xì)介紹了Python函數(shù)式編程實現(xiàn)登錄注冊功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Pytorch轉(zhuǎn)onnx、torchscript方式

    Pytorch轉(zhuǎn)onnx、torchscript方式

    這篇文章主要介紹了Pytorch轉(zhuǎn)onnx、torchscript方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python利用platform模塊獲取系統(tǒng)信息

    python利用platform模塊獲取系統(tǒng)信息

    這篇文章主要介紹了python利用platform模塊獲取系統(tǒng)信息,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-10-10
  • 一文詳解Python定時任務(wù)觸發(fā)

    一文詳解Python定時任務(wù)觸發(fā)

    這篇文章主要為大家詳細(xì)介紹了Python定時任務(wù)觸發(fā)的相關(guān)知識,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2023-04-04
  • python與js進(jìn)行MD5取hash有什么不同

    python與js進(jìn)行MD5取hash有什么不同

    這篇文章主要講解得內(nèi)容是python與js進(jìn)行MD5取hash有什么不同,我們在做前端做滲透測試時會遇到一些關(guān)鍵字進(jìn)行了加密得情況,而且python和js對json進(jìn)行md5取hash,MD5結(jié)果值還不一致,下面我們就爛看看到底是哪里不同吧,需要的朋友可以參考一下
    2022-02-02

最新評論