python try catch 所有异常,如何在Try / Catch Block Python中捕获所有异常?

I am writing python code to install all the library packages required by my program in the linux environment.So the linux may contain python 2.7 or 2.6 or both so I have developed a try and except block codes that will install pip packages in linux. Try block code consists of python 2.7 version pip install and Catch block contains python 2.6 version pip install. My Problem is the peace of code is working fine, when i tried to install pandas in python 2.6 its getting me some errror. I want to catch that exception. Can you please tell me how to improve my try except blocks to catch that exception

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]

解决方案

You can catch several exceptions using one block. Let's use Exception and ArithmeticError for exceptions.

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)

If you need to catch several exceptions and handle each one on its own then you'd write an except statement for each one.

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)

You can also check if the exception is of type "MyCustomException" for example using if statements.

if isinstance(e, MyCustomException):

# Do something

print(1)

As for your problem, I suggest splitting the code into two functions.

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

Note: I didn't test this, I'm no expert as well so I hope I can help.

Useful links:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值