Python:AttributeError:'NoneType'对象没有属性'text'

时间:2019-06-06 23:01:02

标签: python python-3.x

我每天都在使用python脚本运行,以从网络设备(Palo Alto防火墙)备份配置。我正在使用API​​功能登录设备。由于某些字符未解码,因此出现错误

AttributeError: 'NoneType' object has no attribute 'text'

因此,这是引发错误的代码部分:

r = requests.get('https://%s/api/?type=keygen&user=admin&password=password' %host, verify=False)

密码包含特殊字符,例如“ +”,“ @”。我已经检查了有关Paloalto的kb文章,当我们手动输入HTTPS URL:(https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g000000CliMCAS)时,它们具有解决方案。

他们建议:

  

例如,如果密码包含特殊字符,例如“#”   和“&”分别使用URL编码%23和%26。

这在我手动输入密码时有效。但是,当在get请求中传递参数时,如何为“ +”(解码值为%2B)的解码值传递参数?

假设密码是p @ ssword +,我们在代码中输入的用于获取请求api网址的密码将是https://192.168.10.1/api/?type=keygen&user=admin&password=p%40ssword%2B

这将给出:

TypeError: not enough arguments for format string

2 个答案:

答案 0 :(得分:0)

  

所以说密码是p @ ssword +,这是我们在代码中输入的   请求api网址将为   https://192.168.10.1/api/?type=keygen&user=admin&password=p%40ssword%2B

如果直接将其用作get函数的参数,则%40s%2B将被视为string formatting specifiers

  

'%'字符,标志着说明符的开始。

您必须使用另一个%来使%字符转义:

  

'%'未转换任何参数,因此在   结果。

尝试一下:

url_fmt = "https://%s/api/?type=keygen&user=admin&password=p%%40ssword%%2B"
host = "api"
print(url_fmt % host)

# https://api/api/?type=keygen&user=admin&password=p%40ssword%2B

答案 1 :(得分:0)

使用.format函数。

"https://{}/api/?type=keygen&user=admin&password=password".format(host)