python错误代码处理

python error code handling

我想查看安装的发行版:

def check_linux():
    if subprocess.call(['apt-get', '-v']) == 0: #if true
        print('apt')
    else:                                       #if false
        print('rpm')

check_linux()
print('done')

当我在 debian 发行版中尝试这个时,一切正常,我得到: "apt" 和 "done" 在标准输出。但是如果我 运行 这个代码在 fedora 有错误代码并且 "done" 没有打印(脚本结束得太早)。 如何解决这个问题?

subprocess.call 如果找不到 运行 的可执行文件,则会引发异常,Fedora 和 apt-get 就是这种情况。您可以遍历 PATH 或尝试任何其他常用技巧,但幸运的是 Python 在其标准库中已经具有函数 platform.linux_distribution(),例如:

>>> import platform
>>> platform.linux_distribution()
('CentOS Linux', '7.0.1406', 'Core')

您可以查看它的实现方式 here

使用try/except。使用此方法,您只需 try 到 运行 apt。如果这不起作用(即--except)尝试运行 rpm。如果这些都不起作用,那么我建议使用 Bereal 建议的默认值——使用默认值 platform.linux_distribution。 但是,由于很可能至少安装了其中一个,我认为您最好使用 try 方法。此外,您以后可以包含 yum 等包。 try/except(通用)的示例代码:

try:
    x = input("Please input a number.\n")
except ValueError: # Someone put in a character
    print 'Not a valid number.\n'

在您的场景中:

import os
package_manager = ""
def check_linux():
    try:
        os.system("apt")
        package_manager = "apt"
    except:
        os.system("rpm")
        package_manager = "rpm"
    except: # WARNING! NEVER USE EXCEPT WITHOUT AN ERROR EXCEPT IN THE SIMPLEST OF SCENARIOS. When I find the correct error for this situation I will edit my code.
        os.sytem("yum")# ...etc, etc.
        package_manager = "yum"
    print package_manager

check_linux()
print 'done'

编码愉快!祝你好运!