#!/usr/bin/env PYTHONHASHSEED=1234 python3# Copyright 2014-2019 Brett Slatkin, Pearson Education Inc.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.# Reproduce book environmentimport randomrandom.seed(1234)import loggingfrom pprint import pprintfrom sys import stdout as STDOUT# Write all output to a temporary directoryimport atexitimport gcimport ioimport osimport tempfileTEST_DIR = tempfile.TemporaryDirectory()atexit.register(TEST_DIR.cleanup)# Make sure Windows processes exit cleanlyOLD_CWD = os.getcwd()atexit.register(lambda: os.chdir(OLD_CWD))os.chdir(TEST_DIR.name)def close_open_files():everything = gc.get_objects()for obj in everything:if isinstance(obj, io.IOBase):obj.close()atexit.register(close_open_files)# Example 1def safe_division(number, divisor,ignore_overflow,ignore_zero_division):try:return number / divisorexcept OverflowError:if ignore_overflow:return 0else:raiseexcept ZeroDivisionError:if ignore_zero_division:return float('inf')else:raise# Example 2result = safe_division(1.0, 10**500, True, False)print(result)# Example 3result = safe_division(1.0, 0, False, True)print(result)# Example 4def safe_division_b(number, divisor,ignore_overflow=False, # Changedignore_zero_division=False): # Changedtry:return number / divisorexcept OverflowError:if ignore_overflow:return 0else:raiseexcept ZeroDivisionError:if ignore_zero_division:return float('inf')else:raise# Example 5result = safe_division_b(1.0, 10**500, ignore_overflow=True)print(result)result = safe_division_b(1.0, 0, ignore_zero_division=True)print(result)# Example 6assert safe_division_b(1.0, 10**500, True, False) == 0# Example 7def safe_division_c(number, divisor, *, # Changedignore_overflow=False,ignore_zero_division=False):try:return number / divisorexcept OverflowError:if ignore_overflow:return 0else:raiseexcept ZeroDivisionError:if ignore_zero_division:return float('inf')else:raise# Example 8try:safe_division_c(1.0, 10**500, True, False)except:logging.exception('Expected')else:assert False# Example 9result = safe_division_c(1.0, 0, ignore_zero_division=True)assert result == float('inf')try:result = safe_division_c(1.0, 0)except ZeroDivisionError:pass # Expectedelse:assert False# Example 10assert safe_division_c(number=2, divisor=5) == 0.4assert safe_division_c(divisor=5, number=2) == 0.4assert safe_division_c(2, divisor=5) == 0.4# Example 11def safe_division_c(numerator, denominator, *, # Changedignore_overflow=False,ignore_zero_division=False):try:return numerator / denominatorexcept OverflowError:if ignore_overflow:return 0else:raiseexcept ZeroDivisionError:if ignore_zero_division:return float('inf')else:raise# Example 12try:safe_division_c(number=2, divisor=5)except:logging.exception('Expected')else:assert False# Example 13def safe_division_d(numerator, denominator, /, *, # Changedignore_overflow=False,ignore_zero_division=False):try:return numerator / denominatorexcept OverflowError:if ignore_overflow:return 0else:raiseexcept ZeroDivisionError:if ignore_zero_division:return float('inf')else:raise# Example 14assert safe_division_d(2, 5) == 0.4# Example 15try:safe_division_d(numerator=2, denominator=5)except:logging.exception('Expected')else:assert False# Example 16def safe_division_e(numerator, denominator, /,ndigits=10, *, # Changedignore_overflow=False,ignore_zero_division=False):try:fraction = numerator / denominator # Changedreturn round(fraction, ndigits) # Changedexcept OverflowError:if ignore_overflow:return 0else:raiseexcept ZeroDivisionError:if ignore_zero_division:return float('inf')else:raise# Example 17result = safe_division_e(22, 7)print(result)result = safe_division_e(22, 7, 5)print(result)result = safe_division_e(22, 7, ndigits=2)print(result)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。