导入Python库并优化处理,如果它们不可用 [英] Importing Python libraries and gracefully handling if they are not availalble

查看:161
本文介绍了导入Python库并优化处理,如果它们不可用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



如果我只有一个try catch块,我会得到1个异常(第一个)。有没有一种模式来迭代所有的libs,并且每个单独缺少的lib都有一个单独的异常?

 #!/ usr / bin / env python 

try:import sys
除了:print sys.exc_info()
try:import numpy as np
except:print sys.exc_info )
尝试:导入scipy作为sp
除了:print sys.exc_info()
try:import os as os
除了:print sys.exc_info()
try :从运算符import itemgetter
除了:print sys.exc_info()
try:import socket
除了:print sys.exc_info()
try:import logging
except :print sys.exc_info()
try:from time import gmtime,strftime
except:print sys.exc_info()


解决方案

您可以使用 __ import __ 动态导入模块,允许您 - 除其他外 - 通过以名称迭代列表导入模块。



例如:

  libnames = ['numpy','scipy' 'operator'] 
在libnames中的libname:
try:
lib = __import __(libname)
除了:
打印sys.exc_info()
其他:
globals()[libname] = lib

您可以扩展它来处理导入...作为... 从...导入... 表单或只是稍后进行分配手动,即:

  np = numpy 
sp = scipy
itemgetter = operator.itemgetter


I would like to import bunch of libraries and catch the exception.

If I have only 1 try catch block I get 1 exception (the first one). Is there a pattern to iterate over all of the libs and have a separate exception for each individual missing lib?

#!/usr/bin/env python

try: import sys
except: print sys.exc_info()
try: import numpy as np
except: print sys.exc_info()
try: import scipy as sp
except: print sys.exc_info()
try: import os as os
except: print sys.exc_info()
try: from operator import itemgetter
except: print sys.exc_info()
try: import socket
except: print sys.exc_info()
try: import logging
except: print sys.exc_info()
try: from time import gmtime, strftime
except: print sys.exc_info()

解决方案

You can use __import__ to dynamically import modules, allowing you to - among other things - import modules by iterating a list with their names.

For example:

libnames = ['numpy', 'scipy', 'operator']
for libname in libnames:
    try:
        lib = __import__(libname)
    except:
        print sys.exc_info()
    else:
        globals()[libname] = lib

You can either extend that to handle the import ... as ... and from ... import ... forms or just do the assignments later manually, ie.:

np = numpy
sp = scipy
itemgetter = operator.itemgetter

这篇关于导入Python库并优化处理,如果它们不可用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆