使用请求时的Python错误处理

时间:2017-05-23 01:16:54

标签: python error-handling python-requests

我编写了下面的脚本,以便能够连接到远程服务器并从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()

1 个答案:

答案 0 :(得分:1)

doc中的versiondef version变量位于try: catch:之外,因此r由于例外而导致None,接下来的2操作也失败了,引发了一些未被捕获的异常。 main中的哪个表面。您可以尝试在doc中添加versiontry: catch:,看看它是否有效。

相关建议:捕获特定异常,因为这有助于了解代码崩溃的原因。恩。 Response.raise_for_status()提出requests.exceptions.HTTPError。赶上,提出所有其他例外。 xml可能会引发别的东西,抓住它,而不是捕获所有。