gpt4 book ai didi

python - 为什么这个 AssertionError 异常不继续

转载 作者:行者123 更新时间:2023-12-01 01:58:29 26 4
gpt4 key购买 nike

我有什么

我发布了相关问题Is there a method to help make this Python logic run faster几天前,在获得确认的解决方案后,我扩展了这个逻辑以满足我的测试需求。

由于某种原因,我不知道如何告诉这个Python,如果它得到AssertionError,它正在运行。打印出Assertion Error然后continue再次回到逻辑。

from cpppo.server.enip.get_attribute import proxy_simple
from datetime import datetime
import time, csv, sys

host = "<PLC IP Address>"
TagName = "Tag Name"
RootCsvFile = "X:\\Some\\Folder\\Path\\"
source = proxy_simple(host)
prev = None

def csvwrite(v):
with open(v[2],"a",newline='') as file:
csv_file = csv.writer(file)
csv_file.writerow([v[0],v[1]])

def ExecLoop(pr):
prev = pr
while True:

for message in source.read(TagName):

try:
val = message[0]
timestr = str(datetime.now())
if val != prev:
prev = val
YYYYMMDD = datetime.today().strftime('%Y%m%d')
CsvFile = RootCsvFile + TagName + "_" + YYYYMMDD + ".csv"
print(timestr, val, CsvFile)
csvwrite([timestr, val, CsvFile])

except AssertionError:
print("Assertion Error")
continue
ExecLoop(prev)
<小时/>

问题

由于这是通过 VPN 连接从 PLC 机器网络获取数据,因此每当 VPN 中断且无法通过 Python 访问时,就会出现以下错误,看起来像 except AssertionError:没有执行我要求它执行的操作,只是收到错误:

Traceback (most recent call last):   File
"~\GetTag-ToSQLDB&CSVEFile.py", line 63, in <module>
ExecLoop(prev) File "~\GetTag-ToSQLDB&CSVEFile.py", line 46, in ExecLoop
for message in source.read(TagName): File "~\Python\Python36-32\lib\site-packages\cpppo\server\enip\get_attribute.py",
line 431, in read
for val,(sts,(att,typ,uni)) in reader: File "~\Python\Python36-32\lib\site-packages\cpppo\server\enip\get_attribute.py",
line 606, in read_details
depth=self.depth, multiple=self.multiple, timeout=self.timeout )): File
"~\Python\Python36-32\lib\site-packages\cpppo\server\enip\client.py",
line 1393, in operate

for idx,dsc,req,rpy,sts,val in harvested: File "~\Python\Python36-32\lib\site-packages\cpppo\server\enip\client.py",
line 1270, in pipeline
complete, requests )

AssertionError: Communication ceased before harvesting all pipeline responses: 0/ 1

我想要什么

我希望它在出现 AssertionError 时继续重试因为通常当出现连接问题时,Python 运行的 VPN 客户端上的网络设备每周会自动重新启动一次,只有短短的几秒或几分钟的时间。

  • 我的问题:我怎样才能获得 except AssertionError:这个过程中的逻辑是打印一些东西,然后返回并再次尝试循环或其他什么?

    • 发生错误时,进程会停止,并且屏幕上会显示回溯详细信息,如本问题的问题部分中所示。

我的假设

我假设问题与:

  • AssertionError client.py 中定义的处理回溯错误中指定的文件,并取代脚本 except AssertionError:脚本中的逻辑。

  • Try:Exception:逻辑在 while True 内循环,然后在 forwhile True 内循环循环。

<小时/>

其他详细信息(以防万一)

  • 此进程正在使用 cpppo包。

  • 我正在使用Python版本3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)]以及Windows 10

  • 我正在从 IDLE 运行此进程因为我正在测试而不是作为编译包或类似的东西。所以我发布的逻辑保存为py文件,然后在IDLE中打开时我按 F5 执行它.

  • “假设”相关client.pyAssertionError相关的逻辑(参见第 1269 行):

    • 此处分享的逻辑 clienty.py因为对于我的帖子来说太大了。

最佳答案

AssertionError 发生在 source.read(TagName) 调用中。你需要用你的 try except block 来包装它:

while True:
try:
for message in source.read(TagName): # Note that this connection might be broken after the error.
val = message[0]
timestr = str(datetime.now())
if val != prev:
prev = val
YYYYMMDD = datetime.today().strftime('%Y%m%d')
CsvFile = RootCsvFile + TagName + "_" + YYYYMMDD + ".csv" print(timestr, val, CsvFile)
csvwrite([timestr, val, CsvFile])
except AssertionError:
print("Assertion Error")
continue

关于python - 为什么这个 AssertionError 异常不继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49926077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com