当前位置: 代码迷 >> python >> python-改进脚本和异常处理
  详细解决方案

python-改进脚本和异常处理

热度:97   发布时间:2023-06-13 13:37:10.0

我写了我的第一个python脚本,它使用configparser读取了一个ini文件。

首先我的ini文件是这样定义的:

;ini
[hypervisor1]
name = hyp1
how = ssh
vms = vm1 vm2 vm3

[hypervisor2]
name = hyp2
how = vpn
vms = vm4 vm5 vm6

其次,我的脚本:

import configparser
import os.path
import argparse

file_path = os.path.join(os.path.dirname(__file__),"config.ini")

parser = configparser.SafeConfigParser()
parser.read(file_path)

def get_args():
  parser = argparse.ArgumentParser()
  parser.add_argument("--vm", help="display info")

  args = parser.parse_args()

  vm = args.vm

  return vm

vm = get_args()



def print_hyp(name_s):
    for info in parser.sections():
        for key, value, in parser.items(info):
            for value in value.split():   # split whitespace vms value
                if (value == name_s):
                    global info_s
                    info_s = info
                    print(name_s, "is deployed on", info)


if (print_hyp):
        print_hyp(vm)

        name = parser.get(info_s, 'name')
        how = parser.get(info_s, 'how')

        print("Name:", name)
        print("How:", how)

所以我需要获取属于值的部分:函数print_hyp。 当我得到它时,我必须打印其他键及其值。

我确定我的脚本很丑陋,该如何改进?

而且我没有错误管理,例如,输出不存在的vm:

./script.py --vm stackoverflow
Traceback (most recent call last):   File "script.py", line 43, in <module>
name = parser.get(info_s, 'name') 
NameError: global name 'info_s' is not defined

一样,没有争论。

你可以帮帮我吗?

非常感谢!

我会补充

vm = get_args()
print('vm', vm)   # to verify vm arg is what you want

if这没有道理:

如果(print_hyp):print_hyp(vm)...

您是否想要类似if vm is not None:

print_hyp(name_s)不返回任何内容。 在打印一些东西。 使用global info_s是不明智的。 我很少使用global,所以我什至不记得是否也必须在函数外部对其进行初始化。 我认为您的函数应该返回它或它的值列表,而不是使用global

您还应该使用if __name__=='__main__ :`。 如果您不知道这是什么目的,建议您阅读一些基本的脚本布局文档。