python之解析 yaml配置文件时TypeError: string indices must be integers

#定义一个SuperLogin登录函数,传递3个形参数

 def SuperLogin(lANIP,username, password):
		driver = webdriver.Chrome()
		driver.get(LANIP)
		print(driver.title) #127G | 128G芯片方案存在多种设备型号,不好区分
		#superName = "super"
		#superPass = "admin"
		driver.find_element_by_id("username").clear()
		driver.find_element_by_id("username").send_keys(username)
		driver.find_element_by_id("password").clear()
		driver.find_element_by_id("password").send_keys(password)
		driver.find_element_by_id("LoginId").click()
		time.sleep(3)
		#由于登录界面和后台管理界面不在同一个iframe下,则需要跳转iframe
		fh = driver.find_element_by_xpath("//*[@id='mainFrame']")
		driver.switch_to.frame(fh)
		time.sleep(2)
		print("*******************登录成功*******************")
		#定位元素到退出按钮
		lgout = driver.find_element_by_xpath('//*[@id="exit_button"]').get_attribute('value')
		print("****************点击 %s 按钮****************" % lgout)
		driver.find_element_by_xpath('//*[@id="exit_button"]').click()
		time.sleep(3)


2.定义一个获取登录的参数值,保存在一个yml配置文件中
注意:要是有yml配置文件必须先安装 pip install pyyaml 这个类
并且写的格式是键值对;一定要注意值这块数据必须 在冒号后空一格。否则会返回str type而不是dict type
def getLogin_conf():
	#另一种方法打开文件操作
	#f = open ("config.yml", "r", encoding='utf-8')
	with open ("config.yml", "r", encoding='utf-8') as f:
		cfg = f.read()
		dic = yaml.load(cfg)
		print("==============打印config.yml===============")
		print(cfg)
		f.close()
		print(type(dic)) #str
		print("**************打印dic*****************")
		print(dic)
		#如果config.yml配置文件如图1:配置格式:则这里是返回字符串类型
		#如果是图2 格式注意看颜色区别,则返回字典类型
		#思路:通过如下几条命令验证返回的type类型
		#subDic = dic['login'] #返回的是字符串
		#print(subDic)
		#print(type(subDic)) #返回str type
		LANIP = dic['login']['device_ip']
	    # 如果是图1的配置,到这边会提示一个type告警TypeError: string indices must be integers
	    #如果是图2 的配置,则是正常, 返回字典类型
		username = dic['login']['super_name']
		password = dic['login']['super_pwd']
		username1 = dic['login']['nor_name']
		password1 = dic['login']['nor_name']
		print(LANIP, username, password, username1, password1)
		return LANIP, username, password, username1, password1

if __name__ == '__main__':
	LANIP,username,password,username1,password1 = getLogin_conf()
 print("=================================================================")
    print("== ***************开始输入web Super登录名和密码*************** ==")
    print("=================================================================")
    SuperLogin(LANIP,username, password)

config.yml配置 如图1:(错误的配置)
关键字的颜色是黄色:这种配置在解析时会返回字符串,然而导致:
type告警TypeError: string indices must be integers
python之解析 yaml配置文件时TypeError: string indices must be integers_第1张图片
config.yml配置如图2:(正常的配置)
关键字的颜色是红色:
python之解析 yaml配置文件时TypeError: string indices must be integers_第2张图片

你可能感兴趣的:(Python学习)