如果要使用该软件包,我想使用colored在Python 3.6中进行打印,如下所示:
print('{}Hello, world!{}'.format(colored.fg(1), colored.attr(0)))
但是,我希望在可能的情况下将colored
设置为可选,同时仍然打印任何可以样式化的文本。由于可以使用colored
的多种方式(例如colored.stylize()
并一起添加颜色),仅创建用于打印的包装函数似乎是不够的。
cheerful = colored.fg('cyan') + colored.attr('bold')
print(colored.stylize("Hello, world!", cheerful, colored.attr("underlined"))
尽管通常使用模拟来进行测试,但是在没有可选库的情况下创建要使用的模拟库是否可以接受??在名为colored_mock
的模块中进行类似的操作(按照in this question的说明进行模拟):
from unittest.mock import Mock
import sys
import types
module_name = 'mock_colored'
mock_colored = types.ModuleType(module_name)
sys.modules[module_name] = mock_colored
# following the original definition
def stylize(string, styles, reset=True):
# return the original string so it can be used
return string
mock_colored.stylize = Mock(name=module_name+'.stylize', side_effect=stylize)
# and so on until most of the module attributes and functions are covered
我可以这样做:
try:
import colored
except ImportError:
from .mock_colored import mock_colored as colored
答案 0 :(得分:0)
使用Mock
表示您正在测试。如果这是您自己的代码,则最好为stylized
以及您要导入的任何其他colored
方法使用包装器:
colored_imported = False
try:
import colored
colored_imported = True
except ImportError:
pass
def stylized(string, styles, reset=True):
if colored_imported:
return colored.stylized(string, styles, reset=reset)
else:
return string
这将有助于发现由于拼写错误的方法(例如stylised
)或参数太少而引起的问题。这种方法还应该使您的代码更易于理解和调试。