2017-05-23 5 views
0

リモートサーバーに接続してXMLファイルからデータを取得できるように、以下のスクリプトを作成しました。私はいくつかのデバイスで問題をスキップできるようにいくつかのエラー処理を追加しました。何らかの理由で、スクリプトが401メッセージを返すと、ループ全体が壊れ、「csvファイルを正しく読み込めませんでした」というメッセージが表示されます。私は例外を処理する他の方法を試したが、それは他の時点で失敗するだろう。これに適切に対処する方法に関する情報? def versionリクエストを使用する際のPythonエラー処理

#!/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

docversion及び変数はr例外に起因Noneあるときに、次の2つの操作はまた、いくつかのキャッチされない例外を、フェイルtry: catch:外です。 mainの表面。 try: catch:docversionを含めて試してみましょう。

関連する提案:コードがクラッシュした理由について詳しく知るために、特定の例外をキャッチしてください。例。 Response.raise_for_status()が発生するrequests.exceptions.HTTPError。それをキャッチし、他のすべての例外を起こしてください。 xmlはALLをキャッチするのではなく、何かを上げてキャッチするかもしれません。

+0

私はそれを試したと思っていましたが、私はそれを元に戻して完全に機能しました。 401処理、接続処理なし!ありがとう! – yusof

関連する問題