Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无限量的垃圾信息_Python_Telegram - Fatal编程技术网

Python 无限量的垃圾信息

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

在这个循环中,有时我会收到无穷多个带有代码请求的电报错误垃圾邮件,这不等于200,并且日志文件中没有记录。就像在bot.send_消息上循环一样。我不明白为什么。 但是代码没有中断,所以我不能得到任何错误。似乎“睡眠”有时不起作用,但它怎么能随机起作用呢

大多数情况下,代码工作正常

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_代码,否则可能修复了这个问题。谢谢顺便说一句,我仍然不理解这个问题的逻辑,你的路径函数似乎还可以。正如我所说的,试图在一个关闭的文件上写入会产生错误。祝你好运