编写使用 tqdm 的代码,但如果未安装 tqdm,则可以无缝避免它

问题描述 投票:0回答:1

我想编写一个使用 tqdm 显示进度条的 python 代码,但是如果 tqdm 不可用,那么我的代码应该在不使用 tqdm 的进度条的情况下运行,并且不会引发 ImportError 异常;

例如,当 tqdm 可用时,它应该 表现得像这样

from tqdm import tqdm

def my_code(items):
    for item in tqdm(items, unit='item'):
        print(item)

..当 tqdm 不可用时,它应该 表现得像这样 :

def my_code(items):
    for item in items:
        print(item)

我该怎么做?

我尝试只包装导入行:

try:
    from tqdm import tqdm
except ImportError:
    pass

..但这并没有阻止 NameError 出现在“for item in tqdm”行上。 我也可以用 try catch 包裹该行..但这只会使它变得丑陋:(

def my_code(items):
    try:
        tqdm_wrapper_if_exists = tqdm(items, unit='item')
    except NameError:
        tqdm_wrapper_if_exists = items
    for item in tqdm_wrapper_if_exists:
        print(item)

我想要一些可以在导入错误附近的地方执行的操作,并让其余代码无缝运行,而无需进行调整。

我还查看了为已安装的模块创建传递以实现可选导入,但问题本身假设创建一个新的 tqdm.py 文件并将其添加到系统路径中..这使得我感到丑陋试图避免更加生动:) 此外,那里讨论的解决方案不允许在 import 语句之外无缝地编写代码,因为您需要复制 tqdm.py 文件并将其添加到您的路径中。我正在寻找一种更清洁的解决方案。

python importerror tqdm
1个回答
0
投票

这是一个简单的解决方案:

try:
    from tqdm import tqdm
except ImportError:
    def tqdm(iter, **kwargs):
        return iter

这允许从该点开始的任何代码在可用时使用 tqdm,或者在 tqdm 不可用时跳过它。

© www.soinside.com 2019 - 2024. All rights reserved.