我想编写一个使用 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 文件并将其添加到您的路径中。我正在寻找一种更清洁的解决方案。
这是一个简单的解决方案:
try:
from tqdm import tqdm
except ImportError:
def tqdm(iter, **kwargs):
return iter
这允许从该点开始的任何代码在可用时使用 tqdm,或者在 tqdm 不可用时跳过它。