我编写了下面的脚本,以便能够连接到远程服务器并从XML文件中获取一些数据。我添加了一些错误处理,以便能够跳过某些设备的问题。出于某种原因,只要脚本收到401消息,它就会打破整个循环,我收到消息"无法正确读取csv文件"。我尝试了其他处理异常的方法,但在其他方面会失败。有关如何正确处理此问题的任何信息?
#!/usr/bin/python
import sys, re, csv, xmltodict
import requests, logging
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
def version(ip, username, password):
baseUrl = "https://" + ip
session = requests.Session()
session.verify = False
session.timeout = 45
print "Connecting to " + ip
try:
r = session.get(baseUrl + '/getxml?location=/Status', auth=(username, password))
r.raise_for_status()
except Exception as error:
print err
doc = xmltodict.parse(r.text)
version = str(doc['Status']['@version'])
def main():
try:
with open('list.csv', 'r') as file:
reader = csv.DictReader(file)
for row in reader:
version(row['ip'], row['Username'], row['Password'])
except Exception as error:
print ValueError("Could not properly read the csv file \r")
sys.exit(0)
if __name__ == "__main__":
main()
答案 0 :(得分:1)
doc
中的version
和def version
变量位于try: catch:
之外,因此r
由于例外而导致None
,接下来的2操作也失败了,引发了一些未被捕获的异常。 main
中的哪个表面。您可以尝试在doc
中添加version
和try: catch:
,看看它是否有效。
相关建议:捕获特定异常,因为这有助于了解代码崩溃的原因。恩。 Response.raise_for_status()
提出requests.exceptions.HTTPError
。赶上,提出所有其他例外。 xml可能会引发别的东西,抓住它,而不是捕获所有。