2016-07-28 8 views
0

私はプログラミングに慣れていないので、インターネットを午前2時から午前8時までオンにするために、この小さなスクリプトをコーディングしました。Datetime/Timeモジュールを使用しているときに奇妙なエラーが発生しましたか?

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() 

しかし、私はそれを実行するたびに、私はこれを取得:

ライン35、tdeltaで TDEL = dt.datetime.strptime(FMT) - dt.datetime.strptime(B、FMT)を TypeError:intでなくstrでなければなりません

なぜtdelta関数では両方のパラメータが文字列なので、なぜ私は理解できません。わかりません。私は何か見落としてますか?何かを指定する必要がありますか?それとも、私が逃したはずのタイプミスですか?

また、私のコードを一目見れば、私は絶対初心者であることがはっきりと分かると思いますので、コードを改善する提案があれば、私は永遠に感謝しています。

本当に助けていただきありがとうございます。 :)

編集:ここでは(要求ごとのように)完全なスタックトレースがあります:

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

これは 'tdelta'の' a'と 'b'の両方の引数が文字列でなければならないことを意味します。 –

+1

スタックトレースの一部のみを転記しました。残りの部分を見てください。それはあなたに悪い 'tdelta'コールを直ちに指摘します。 – user2357112

+0

@NickilMaveliしかし、彼らはすでにですか? – Almond

答えて

0

線46及び54(x = tdelta(nowto8))は、整数引数ではなく、文字列でtdeltaを呼び出しています。変更ライン46-47にも

sleep(nowto8) 

から

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

から

sleep(nowto8) 

や線54-55に

x = tdelta(nowto8) 
sleep(x) 

から。

+0

ああ、ありがとう!問題は、もともと私が行っていたことですが、このバグが発生したときに、何らかの理由で*(?!?!?)になるかもしれないと考えました。それでも私はそれに感謝しています:) – Almond

+0

また、 'main'関数を再訪する必要があります。再帰的に呼び出すことはいい考えのようには思えません... –

関連する問題