《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))