Python 无限量的垃圾信息
在这个循环中,有时我会收到无穷多个带有代码请求的电报错误垃圾邮件,这不等于200,并且日志文件中没有记录。就像在bot.send_消息上循环一样。我不明白为什么。 但是代码没有中断,所以我不能得到任何错误。似乎“睡眠”有时不起作用,但它怎么能随机起作用呢 大多数情况下,代码工作正常Python 无限量的垃圾信息,python,telegram,Python,Telegram,在这个循环中,有时我会收到无穷多个带有代码请求的电报错误垃圾邮件,这不等于200,并且日志文件中没有记录。就像在bot.send_消息上循环一样。我不明白为什么。 但是代码没有中断,所以我不能得到任何错误。似乎“睡眠”有时不起作用,但它怎么能随机起作用呢 大多数情况下,代码工作正常 import time import telebot import requests import datetime import json import os from funcs import * from va
import time
import telebot
import requests
import datetime
import json
import os
from funcs import *
from varias import *
from pathlib import Path
if not os.path.exists('C:/pymon_logs'):
os.makedirs('C:/pymon_logs')
log_file = path("api_log", "a")
while 1:
try:
request = str(requests.get("https://***"))
if request == "<Response [200]>":
time.sleep(5)
elif request != "<Response [200]>":
bot.send_message(chat_id, "API " + str(request)[1:-1])
log_file.write(str(request)[1:-1] + " " + today + '\n')
log_file.close()
time.sleep(120)
except requests.ConnectionError as e:
bot.send_message(chat_id, "API Connection Error")
log_file.write("API Connection Error" + " " + today + '\n')
log_file.close()
time.sleep(120)
except requests.Timeout as e:
bot.send_message(chat_id, "API Timeout Error")
log_file.write("API Timeout Error" + " " + today + '\n')
log_file.close()
time.sleep(120)
except requests.RequestException as e:
bot.send_message(chat_id, "API huy znaet chto za oshibka")
log_file.write("API huy znaet chto za oshibka" + " " + today + '\n')
log_file.close()
time.sleep(120)
except:
pass
导入时间
进口遥控机器人
导入请求
导入日期时间
导入json
导入操作系统
从funcs导入*
从varias进口*
从pathlib导入路径
如果不存在os.path.exists('C:/pymon\u logs'):
os.makedirs('C:/pymon\u日志')
日志文件=路径(“api日志”,“a”)
而1:
尝试:
request=str(requests.get(“https://***”))
如果请求==“”:
时间。睡眠(5)
elif请求!="":
bot.发送消息(聊天室id,“API”+str(请求)[1:-1])
log_file.write(str(请求)[1:-1]+“”+today+'\n')
log_file.close()
时间。睡眠(120)
除请求外。连接错误为e:
bot.send_消息(聊天id,“API连接错误”)
log_file.write(“API连接错误”+“”+today+'\n')
log_file.close()
时间。睡眠(120)
请求除外。超时为e:
发送消息(聊天id,“API超时错误”)
log_file.write(“API超时错误”+“”+today+'\n')
log_file.close()
时间。睡眠(120)
除requests.RequestException外,如e:
bot.发送消息(聊天id,“API huy znaet chto za oshibka”)
log_file.write(“API huy znaet chto za oshibka”+“”+today+'\n')
log_file.close()
时间。睡眠(120)
除:
通过
首先,您不应该通过转换为字符串来检查响应代码。这不是一个好的做法
你应该:
request=requests.get(“https://***”)
并通过以下方式进行检查:
如果r.status\u code==200:
...
下一行是不必要的。将此代码替换为else
:
elif请求!="":
但是代码的主要问题是,不应该在无限循环中关闭文件。使用您的代码,在第一个异常时,您将关闭该文件。如果关闭文件句柄,则无法写入,因此无法查看日志文件中的任何内容
并且,在代码获得另一个非200响应代码后,您尝试在一个关闭的文件上写入,然后抛出另一个异常。这样,您可以跳过睡眠(120)部分,一次又一次地抛出
TL,DR,
删除所有
log_文件.close()
零件。您有一个
,而1:try:。。。除了:通过
。这基本上是一个无限循环。不要接受异常。除了@njzk2的注释外,您不应该将requests.get()转换为字符串。尝试执行request=requests。获取(…)
,然后如果请求则执行。确定:
和否则:
在此场景中不使用elif。您可以检查响应代码,而无需将请求转换为字符串request.status\u code
,返回整数。从你的代码来看,你似乎永远不会打开log\u文件
?@Armadillan它的打开路径(“api\u log”,“a”)和appendflag@njzk2这里没有错误,我以前使用过break和print,但是如果我使用log_file.write(…)并且在这个函数中打开文件,它不会每次都打开它吗?不,文件保持打开状态,只要你还没有关闭它。顺便说一句,我希望你使用log_file=open(…)而不是log_file=path(…)所以这是我的path func,它确实打开了里面的文件,主要问题甚至不是在登录时,因为它在工作,当消息没有循环你的更正时:r.status_代码,否则可能修复了这个问题。谢谢顺便说一句,我仍然不理解这个问题的逻辑,你的路径函数似乎还可以。正如我所说的,试图在一个关闭的文件上写入会产生错误。祝你好运