2017-02-02 5 views
0

Ich bin ein Junior in DevOps und ich muss einen Code erstellen, der einige Ergebnisse aus der Tabelle zurückgibt, Deshalb habe ich diesen Code, den ich im Internet gefunden habe, aktualisiert.Fehler: ValueError: Zeitdaten 'N/A' stimmt nicht mit Format '% Y-% M-% D' - Python

Das Ergebnis:

Result code without error

#!/usr/bin/env python 
from sys import stdin 
import datetime 
import json 
import base64 
from datetime import date, timedelta 

dt = date.today() 

report = json.loads(stdin.read()) 
table = base64.b64decode(report["Content"]).splitlines() 
head = table[0].split(",") 
table = table[1:] 

for row in iter(table): 
    user = dict(zip(head, row.split(","))) 
    print ("\033[1m USER: \033[0m \t %s \033[1m MFA_ACTIVE: \033[0m %s \033[1m PASSWORD ENABLED: \033[0m %s \033[1m KEY ROTATED: \033[0m %s \n") % (user["user"], user["mfa_active"], user["password_enabled"], ((dt-(datetime.datetime.strptime((user["access_key_1_last_rotated"]).split('T')[0],"%Y-%m-%d").date())))) 

Mein Problem ist, wenn ich ein Daten wie N haben/A für access_key_1_last_rotated, gibt es einen Fehler:

Valueerror : Zeitdaten 'Nicht zutreffend' entspricht nicht dem Format '% Y-% m-% d'

Wie kann ich den Code anpassen, um Daten wie N/A zu ignorieren?

+2

Können Sie 'try/except' nicht einfach vor der' print'-Zeile in 'datetime' konvertieren? – roganjosh

+0

Also, was meinst du mit "Daten ignorieren"? Wie in, wenn es einen "N/A" -Wert hat, sollte nichts gedruckt werden? – roganjosh

+0

Danke @roganjosh. In meiner Tabelle habe ich die Daten im Format wie 02/02/2016 wo in diesem Teil '((dt- (datetime.datetime.strptime ((Benutzer ["access_key_1_last_rotated"]). Split (' T ') [0], "% Y-% m-% d") date())))) 'Ich muss den Unterschied zwischen heute bis 02.02.2016 finden, aber manchmal habe ich nicht das Datum 02/02/2016, und Ja N/A. –

Antwort

0

Im Allgemeinen würde ich

((dt-(datetime.datetime.strptime((user["access_key_1_last_rotated"]).split('T')[0],"%Y-%m-%d").date())))) 

aus der Print-Anweisung und weisen Sie auf eine Variable bewegen. Dann schnell und schmutzig, können Sie in einem wickeln try-except

var my_date = "N/A" 
try: 
    my_date = ((dt-(datetime.datetime.strptime((user["access_key_1_last_rotated"]).split('T')[0],"%Y-%m-%d").date())))) 
except ValueError as v: 
    # print v somewhere 
    # print(v) 
    # or just pass 
    pass 
print ("\033[1m USER: \033[0m \t %s \033[1m MFA_ACTIVE: \033[0m %s \033[1m PASSWORD ENABLED: \033[0m %s \033[1m KEY ROTATED: \033[0m %s \n") % (user["user"], user["mfa_active"], user["password_enabled"], my_date) 

Es gibt eine ganze Menge in diesem Zeitpunkt Berechnung los, so dass Sie es brechen wollen weiter nach unten, wenn Daten erscheinen in fremden Formaten starten

+0

Dank @Steve Bradshaw, aber wie ich bin nicht so gut mit der Programmierung können Sie den gesamten Code mit der Änderung einfügen? Ich bin ein Netzwerktechniker :) –

+0

Ersetzen Sie Ihre Druckanweisung durch den obigen Code. –

+0

Danke @Steve Bradshaw. Ich habe den Code bearbeitet, aber zeigt nur ein Ergebnis als alle. Ich weiß nicht, ob ich die Frage richtig erklären könnte, aber ich würde gerne alle Ergebnisse zeigen, aber die Daten, wo ich N/A habe, möchte ich N/A in KEY ROTATED zeigen –

Verwandte Themen