《python核心教程2》第十章 練習

  • 2020 年 1 月 20 日
  • 筆記

10-6.改進的open()。為內建的open()函數創建一個封裝。使得成功打開文件後,返迴文件句柄:若打開失敗則返回給調用者None,

而不是生成一個異常。這樣你打開文件就不需要額外的異常處理語句。

 1 def openfile(file):   2     try:   3         f = open(file)   4     except IOError:   5         return None   6     return file   7   8 if __name__ == '__main__':   9     filename = input('Filename:')  10     print(openfile(filename))

 10–8.改進的raw_input()。本章的開頭,我們給出了一個」安全」的float()函數,它建立在內建函數float()上,可以檢測並處理float()可能會引發的兩種不同異常。

同樣,raw_input()函數也可能會生成兩種異常,EOFError(文件末尾EOF,在Unix下是由於按下了Ctrl+D在Dos下是因為 Ctrl+Z)或是KeyboardInterrupt(取消輸入,

一般是由於按下了Ctrl+C)。請創建一個封裝函數safe_input(),在發生異常時返回None。

 1 def safe_input(object):   2   3     try:   4         retval = float(object)   5     except (EOFError, KeyboardInterrupt):   6         retval = None   7     return retval   8   9 if __name__ == '__main__':  10     print(safe_input(input("Input: ")))

 10-9.改進的math.sqrt()。math模組包含大量用於處理數值相關運算的函數和常量。不幸的是,它不能識別複數,所以我們創建了cmath模組來支援複數相關運算。

請創建一個safe_sqrt()函數,它封裝math.sqrt()並能處理負值,返回一個對應的複數。

 1 import math, cmath   2   3 def safe_sqrt(x):   4     try:   5         num = math.sqrt(x)   6     except ValueError:   7         num = cmath.sqrt(x)   8     return num   9  10 if __name__ == '__main__':  11     x = float(input('Number: '))  12     print(safe_sqrt(x))