我希望每次抛出一个异常,比如502httperror或Floodwaiterror来重新启动循环或继续,但是我不知道或者不知道如何去做
代码:
import time
from telethon import TelegramClient,errors
from telethon.tl.functions.photos import UploadProfilePhotoRequest
import os
import urllib.request
import urllib.error
import asyncio
from datetime import datetime
import datetime
api_id = XXXXXX
api_hash = 'XXXXXXXXXXXXXXXX'
client = TelegramClient('Test_Session', api_id, api_hash)
client.start()
async def Change_Photo():
try:
while True:
time.sleep(3)
if os.path.exists("cat.jpg"):
os.remove("cat.jpg")
if os.path.exists("cat"):
os.remove("cat")
urllib.request.urlretrieve("https://cataas.com/cat", "cat")
os.rename('cat', 'cat.jpg')
await client(UploadProfilePhotoRequest(await client.upload_file(r"C:\Users\localhost\PycharmProjects\Scripts Python\Telethon\cat.jpg")))
now = datetime.datetime.now()
os.remove("cat.jpg")
print("Changed Photo:", now.strftime("%Y-%m-%d %H:%M:%S"))
except errors.FloodWaitError as e:
print('Have to sleep', e.seconds, 'seconds')
await asyncio.sleep(e.seconds)
except urllib.error.HTTPError as e:
if e.code == 502:
print("HTTP error 502... Trying again")
loop = asyncio.get_event_loop()
loop.run_until_complete(Change_Photo())
loop.close()
在每个异常中未关闭循环的异常输出
^{pr2}$我还尝试在每个异常中关闭循环(循环.关闭)在
except errors.FloodWaitError as e:
print('Have to sleep', e.seconds, 'seconds')
await asyncio.sleep(e.seconds)
except urllib.error.HTTPError as e:
if e.code == 502:
print("HTTP error 502... Trying again")
但两者都奏效了:
Have to sleep 761 seconds
Traceback (most recent call last):
File "C:/Users/localhost/PycharmProjects/Scripts Python/Telethon/anykipsa.py", line 27, in Change_Photo
await client(UploadProfilePhotoRequest(await client.upload_file(r"C:\Users\localhost\PycharmProjects\Scripts Python\Telethon\cat.jpg")))
File "C:\Users\localhost\AppData\Local\Programs\Python\Python37\lib\site-packages\telethon\client\users.py", line 60, in __call__
result = await future
telethon.errors.rpcerrorlist.FloodWaitError: A wait of 761 seconds is required (caused by UploadProfilePhotoRequest)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/localhost/PycharmProjects/Scripts Python/Telethon/anykipsa.py", line 45, in <module>
loop.run_until_complete(Change_Photo())
File "C:\Users\localhost\AppData\Local\Programs\Python\Python37\lib\asyncio\base_events.py", line 584, in run_until_complete
return future.result()
File "C:/Users/localhost/PycharmProjects/Scripts Python/Telethon/anykipsa.py", line 34, in Change_Photo
loop.close()
File "C:\Users\localhost\AppData\Local\Programs\Python\Python37\lib\asyncio\selector_events.py", line 83, in close
raise RuntimeError("Cannot close a running event loop")
RuntimeError: Cannot close a running event loop
Process finished with exit code 1
几周前,我对编写python还很陌生,当然我做了一些不好的事情,但我找不到什么
多亏了@sparky05的解决方案,我才意识到,在某些情况下
仅为完成和描述总体思路: 而不是
使用
^{pr2}$然后你的函数将继续运行,直到你想停止它。在
相关问题 更多 >
编程相关推荐