2016-07-28 6 views
0

Also bin ich neu in der Programmierung und ich hatte dieses winzige Skript programmiert, um mein Internet von zwei Uhr morgens auf acht Uhr morgens zu aktivieren (lange Geschichte);Weird TypeError bei Verwendung des Datetime/Time-Moduls?

import os 
import datetime as dt 
from time import sleep 


def connect(): 
    print("Connecting...") 
    os.system("netsh wlan connect Sushi") 

def disconnect(): 
    print("Disconnecting...") 
    os.system("netsh wlan disconnect") 

def checkcon(): 
    attempt= 0 
    while os.system("ping google.com") != 0: 
     print("Unable to connect. Trying again.") 
     connect() 
     sleep(attempt) 
     attempt = attempt + 1 
     if attempt != 0: 
      print("Attempt ", str(attempt), " ...") 
    print("Connected successfully") 


def timeformat (hr, min, sec) : #For setting proper datetime parameters. 
    return (str(hr) + ":" + str(min) + ":" + str(sec)) 

FMT = '%H:%M:%S' 
now = timeformat(dt.datetime.now().time().hour, dt.datetime.now().time().minute, dt.datetime.now().time().second) 
twoam = '02:00:00' 
eightam = '08:00:00' 

def tdelta(a, b = now): 
     tdel = dt.datetime.strptime(a, FMT) - dt.datetime.strptime(b, FMT) 
     return tdel.seconds 

twoto8 = tdelta(eightam, twoam) 
nowto8 = tdelta(eightam) 

def main(): 
     if twoto8 >= nowto8: 
       connect() 
       checkcon() 
       print("Your internet has been successfully connected") 
       x = tdelta(nowto8) 
       sleep(x) 
       print("Time's up!") 
       disconnect() 
       exit() 
     else: 
       print("Not yet!") 
       disconnect() 
       x = tdelta(nowto8) 
       sleep(str(x)) 
       main() 

main() 

Aber immer, wenn ich es laufen, bekomme ich diese:

Linie 35, in TDELTA tdel = dt.datetime.strptime (a, FMT) - dt.datetime.strptime (b, FMT) TypeError: muss str sein, nicht int

Ich verstehe nicht wirklich warum, denn in der Funktion tdelta sind beide Parameter Strings, und ... Ich weiß es nicht. Habe ich etwas verpasst? Muss ich etwas angeben? Oder ist es nur ein Tippfehler, den ich verpasst haben muss?

Ich denke auch, ein einziger Blick auf meinen Code macht es deutlich, dass ich ein absoluter Neuling bin, also, wenn Sie irgendwelche Vorschläge haben, meinen Code zu verbessern, werde ich ewig dankbar sein.

Ich schätze wirklich jede Hilfe. :)

EDIT: Hier ist der vollständige Stack-Trace (nach Anfrage):

Traceback (most recent call last): 
File "C:\Users\Lenovo\Desktop\ShutdownTimer.py", line 58, in <module> 
main() 
File "C:\Users\Lenovo\Desktop\ShutdownTimer.py", line 54, in main 
    x = tdelta(nowto8) 
File "C:\Users\Lenovo\Desktop\ShutdownTimer.py", line 35, in tdelta 
    tdel = dt.datetime.strptime(a, FMT) - dt.datetime.strptime(b, FMT) 
TypeError: must be str, not int 
+0

Es bedeutet, dass sowohl 'a' als auch' b' Argumente in 'tdelta' Funktion Strings sein müssen. –

+1

Sie haben nur einen Teil des Stack-Trace gepostet. Sieh dir den Rest an. Es wird dich direkt auf den bösen 'tdelta'-Aufruf hinweisen. – user2357112

+0

@NickilMaveli Aber sind sie nicht schon? – Almond

Antwort

0

Linien 46 und 54 (x = tdelta(nowto8)) fordern tdelta mit einem ganzzahligen Argumente, kein String. Ändern Sie die Zeilen 46-47 von

x = tdelta(nowto8) 
sleep(x) 

zu

sleep(nowto8) 

und Linien 54-55 von

x = tdelta(nowto8) 
sleep(str(x)) 

zu

sleep(nowto8) 

auch.

+0

Ohhh richtig danke! Die Sache ist, dass ich das ursprünglich gemacht hatte, aber als dieser Fehler auftrat, dachte ich, dass das * irgendwie * (?!?!?) Der Grund dafür sein könnte. Aber ich schätze es trotzdem :) – Almond

+0

Sie sollten auch Ihre 'main' Funktion erneut besuchen. Sich selbst rekursiv zu nennen, scheint keine gute Idee zu sein ... –

Verwandte Themen