파이썬 들여 쓰기에 대한 적절한 프로토콜을 따르려고하지만 여전히 파이썬에서 오류가 발생합니다. 나는 파이썬이 좋은 이유가 있고 내 코드가 나쁜 것이라고 확신하지만 근본 원인을 보지 못했습니다. 오류를 실행 Python 들여 쓰기가 직관적이지 않습니다.
은 마지막 줄~/python $ ./hover_api_v1.0.py
File "./hover_api_v1.0.py", line 139
time.sleep(60.0)
^
IndentationError: expected an indented block
다음은 내 코드는 지적한다. 들여 쓰기와 관련없는 일부 헤더가 있습니다.
오류는 time 명령을 사용하여 마지막 행에 표시됩니다. 그러나 나는 코드에서 내 실수를 보지 못한다. 시간 cmd는 최상위 루프의 일부이고 적절히 들여 쓰기됩니다.
while True:
ip_now = get_asus_wan_ip()
if (ip_now == ip_last):
day = datetime.datetime.now().day
if day != last_day:
last_day = day
with open(logfile, "a") as lf:
lf.write(time.strftime("%Y-%m-%d %H:%M:%S") + " WAN IP still the same " + str(ip_last) +"\n")
else:
# We need to do something
#print('WAN IP changed from ' + str(ip_last) + " to " + str(ip_now))
with open(logfile, "a") as lf:
lf.write(time.strftime("%Y-%m-%d %H:%M:%S") + " WAN IP changed from " + str(ip_last) + " to " + str(ip_now) + "\n")
ip_last= ip_now
# connect to API
client = HoverAPI('XXXXXXX','YYYYYYY')
for dnsname in ['*.zzzzz.zzz', '@.zzzzz.zzz']:
#print('Testing: ' + dnsname)
dns_name, domain_name = dnsname.split('.', 1)
# get all DNS records
result = client.call("get", "dns")
assert result['succeeded'], result
# discover existing dns record, if any
dns_record = None
domain_record = None
for dns_domain in result['domains']:
if dns_domain['domain_name'] == domain_name:
domain_record = dns_domain
for dns_entry in dns_domain['entries']:
if dns_entry['name'] == dns_name:
dns_record = dns_entry
break
if dns_record is not None and domain_record is not None:
break
if dns_record is not None and domain_record is not None:
#print('Hover-IP for ' + dnsname + ' = ' + str(dns_entry['content'].encode('ascii','ignore')))
#print('Current IP= ' + str(ip_now))
if str(dns_entry['content']) == str(ip_now):
#print('Hover-IP for ' + dnsname + ' = ' + str(dns_entry['content'].encode('ascii','ignore')) + ' same as Current IP = ' + str(ip_now) + '. No action.')
with open(logfile, "a") as lf:
lf.write(time.strftime("%Y-%m-%d %H:%M:%S") + " Hover-IP for " + dnsname + " = " + str(dns_entry['content'].encode('ascii','ignore')) + " same as Current IP = " + str(ip_now) + ". No action." + "\n")
else:
#print(" Deleting entry for {0}.{1} ... ".format(dns_name, domain_name), end="")
with open(logfile, "a") as lf:
lf.write(time.strftime("%Y-%m-%d %H:%M:%S") + " Deleting entry for " + dnsname + "\n")
result = client.call("delete", "dns/{0}".format(dns_record['id']))
assert result['succeeded'], result
#print("OK")
## create a new A record:
#print("Creating A record {0}.{1} => {2} ... ".format(dns_name, domain_name, ip_now), end="")
with open(logfile, "a") as lf:
lf.write(time.strftime("%Y-%m-%d %H:%M:%S") + " Creating A record " + dnsname + " => " + ip_now + "\n")
record = {"name": dns_name, "type": "A", "content": ip_now}
post_id = "domains/{0}/dns".format(domain_record['id'])
#print("post", post_id, record)
result = client.call("post", post_id, record)
assert result['succeeded'], result
#print("OK")
else:
#print("No record exists for {0}".format(dnsname))
# Sleep at end of loop.
time.sleep(60.0)
의견을 보내 주시면 대단히 감사하겠습니다. Gert
sleep은 while 루프의 일부가되어야하지만 외부에있는 것처럼 보입니다. –
@ Shadow : 나는 파이썬의 빈 코드 블록에 대해이 제한을 알지 못했습니다. 이것이 내가 필요한 정보였습니다. +1 + 답변을 수락했습니다. –