首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕获Try/Catch块Python中的所有异常?

问如何捕获Try/Catch块Python中的所有异常?
EN

Stack Overflow用户
提问于 2017-12-08 17:59:00
回答 1查看 26.4K关注 0票数 8

我正在编写python代码来安装我的程序在linux environment.So中所需的所有库包,linux可能包含python2.7或2.6,或者两者都包含,所以我已经开发了一个尝试代码,除了块代码,这些代码将在linux中安装pip包。尝试块代码由python2.7版本pip安装和Catch块包含python2.6版本pip安装组成。我的问题是代码的安全运行良好,当我试图在python2.6中安装熊猫时,它给我带来了一些错误。我想抓住那个例外。请你告诉我如何改进我的尝试,除了块来捕捉异常。

代码语言:javascript
复制
required_libraries = ['pytz','requests','pandas']
try:
   from subprocess import check_output
   pip27_path = subprocess.check_output(['sudo','find','/','-name','pip2.7'])
   lib_installs = [subprocess.call((['sudo',pip27_path.replace('\n',''),'install', i])) for i in required_libraries]
except:
   p = subprocess.Popen(['sudo','find','/','-name','pip2.6'], stdout=subprocess.PIPE);pip26_path, err = p.communicate()
   lib_installs = [subprocess.call((['sudo',pip26_path.replace('\n',''),'install', i])) for i in required_libraries]
EN

回答 1

Stack Overflow用户

发布于 2017-12-08 18:48:35

您可以使用一个块捕获多个异常。让我们使用异常和ArithmeticError作为异常。

代码语言:javascript
复制
try:
    # Do something
    print(q)

# Catch exceptions  
except (Exception, ArithmeticError) as e:
    template = "An exception of type {0} occurred. Arguments:\n{1!r}"
    message = template.format(type(e).__name__, e.args)
    print (message)

如果您需要捕获几个异常并单独处理每个异常,那么您将为每个异常编写一个except语句。

代码语言:javascript
复制
try:
    # Do something
    print(q)

# Catch exceptions  
except Exception as e:
    print (1)

except ArithmeticError as e:
    print (2)

# Code to be executed if the try clause succeeded with no errors or no return/continue/break statement

else:
    print (3)

您还可以检查异常是否为"MyCustomException“类型,例如使用if语句。

代码语言:javascript
复制
if isinstance(e, MyCustomException):
    # Do something
    print(1)

至于您的问题,我建议将代码分成两个函数。

代码语言:javascript
复制
install(required_libraries)

def install(required_libraries, version='pip2.7'):
    # Perform installation
    try:
        from subprocess import check_output
        pip27_path = subprocess.check_output(['sudo','find','/','-name', version])
        lib_installs = [subprocess.call((['sudo',pip27_path.replace('\n',''),'install', i])) for i in required_libraries]

    except Exception as e:
        backup(required_libraries)

def backup(required_libraries, version='pip2.6'):
    try:
        p = subprocess.Popen(['sudo','find','/','-name',version]], stdout=subprocess.PIPE);pip26_path, err = p.communicate()
        lib_installs = [subprocess.call((['sudo',pip26_path.replace('\n',''),'install', i])) for i in required_libraries]

    except Exception as e:
        template = "An exception of type {0} occurred. Arguments:\n{1!r}"
        message = template.format(type(e).__name__, e.args)
        print (message)

        #Handle exception

注意:我没有测试这个,我也不是专家,所以我希望我能帮上忙。

有用的链接:

  1. 内建例外
  2. 错误和例外
  3. 复合语句
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47719838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档