- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
一旦您在 Python 中引发用户定义的异常,似乎就无法恢复测试的执行。但在我的场景中,我想检查不同输入值发生的错误。但是当前的实现限制继续对不同的输入向量进行错误检查。
但是,在为我的问题提出某种复杂的解决方案之前,我想我会问问专家,看看是否有什么我遗漏的。 不幸的是,如果不进行重大重构,我无法轻易改变这种范式。
我的应用程序看起来类似于:
问题陈述:
我想检查每个输入是否发生错误,如果发生任何错误则引发异常并存储哪个输入的信息
对于其他输入也继续执行程序,但是在我的实现中我无法继续进一步执行。
问题:
从随机导入 randint
class RND_ERROR(Exception):
def __init__(self, ErrNum, *arg, **kwargs):
self.RND_ERR_NR = int(ErrNum)
self.RND_ERR_MSG = ""
if self.RND_ERR_NR == 0x00000000:
self.RND_ERR_MSG = "NO ERROR"
elif self.RND_ERR_NR == 0x00000001:
self.RND_ERR_MSG = "RANDOM NUMBER IS ONE"
elif self.RND_ERR_NR == 0x00000002:
self.RND_ERR_MSG = "RANDOM NUMBER IS TWO"
elif self.RND_ERR_NR == 0x00000003:
self.RND_ERR_MSG = "RANDOM NUMBER IS THREE"
else:
self.RND_ERR_MSG = "RANDOM NUMBER GREATER THAN THREE"
def __str__(self):
return "RND ERROR (0x%08X): %s" % (self.RND_ERR_NR,self.RND_ERR_MSG)
def __repr__(self):
return self.__str__()
def check_error(b):
print "dict",b
count = 0
for i, error_nr in b.items():
error_nr = error_nr % 2
print "key:val",i, error_nr
if error_nr ==0:
count = count +1
# print count
elif error_nr > 0:
# print error_nr
raise RND_ERROR(error_nr)
def numGen(input):
from random import randint
result= {}
for i in range(9):
j = (randint(0,4))
result[i] = input+j
result.update()
check_error(result)
if __name__ == '__main__':
try:
numGen(3)
except BaseException as e:
print e
Output1: # Since at the 6th input error occurred and execution stopped **(Some what Best case)**
dict {0: 6, 1: 6, 2: 6, 3: 6, 4: 4, 5: 6, 6: 3, 7: 3, 8: 7}
key:val 0 0
key:val 1 0
key:val 2 0
key:val 3 0
key:val 4 0
key:val 5 0
key:val 6 1
RND ERROR (0x00000001): RANDOM NUMBER IS ONE
**Output2:**
dict {0: 7, 1: 6, 2: 4, 3: 3, 4: 6, 5: 6, 6: 7, 7: 5, 8: 4}
key:val 0 1
RND ERROR (0x00000001): RANDOM NUMBER IS ONE
Expected Output:
Input1 - Pass
Input2 - Pass
Input3 - Pass
Input4 - Pass
Input5 - Pass
Input6 - RANDOM IS TWO (exception occurred)
Input7 - Pass # execution continued for next input check
Input8 - Pass
Input9 - RANDOM IS ONE (exception occurred)
Input10 - Pass # execution continued for next input check
我找到了链接,它看起来与我的要求相似。不同之处在于不检查文件读取中的错误,如果发现错误则将其堆叠起来。在我的例子中,它正在检查输入。
提前致谢!
最佳答案
您定义的是一个逻辑矛盾:您想要引发异常并继续正常执行。第 4 代语言中 raise exception 的常见含义意味着您不想继续正常执行。下定决心。
欢迎您打印消息,不引发异常,并继续正常操作。如果您想稍后引发异常,欢迎您这样做。
如果要检查每个输入的错误,则不能使错误检查本身成为异常条件。我在这里有点猜测:您想报告每一个差异,但在您完成所有输入案例之前不要引发异常。试试这个:它将错误处理拆分为非异常例程。我完整地保留了您的许多异常处理内容,以防您想用其他代码填充它。
class RND_ERROR(Exception):
def __init__(self, ErrNum, *arg, **kwargs):
self.RND_ERR_NR = int(ErrNum)
self.RND_ERR_MSG = ""
def __str__(self):
return "RND ERROR (0x%08X): %s" % (self.RND_ERR_NR,self.RND_ERR_MSG)
def __repr__(self):
return self.__str__()
def handle_error(ErrNum):
RND_ERR_NR = int(ErrNum)
RND_ERR_MSG = ""
if RND_ERR_NR == 0x00000000:
RND_ERR_MSG = "NO ERROR"
elif RND_ERR_NR == 0x00000001:
RND_ERR_MSG = "RANDOM NUMBER IS ONE"
elif RND_ERR_NR == 0x00000002:
RND_ERR_MSG = "RANDOM NUMBER IS TWO"
elif RND_ERR_NR == 0x00000003:
RND_ERR_MSG = "RANDOM NUMBER IS THREE"
else:
RND_ERR_MSG = "RANDOM NUMBER GREATER THAN THREE"
print "RND ERROR (0x%08X): %s" % (RND_ERR_NR, RND_ERR_MSG)
def check_error(b):
print "dict",b
count = 0
need_exception = False
for i, error_nr in b.items():
error_nr = error_nr % 2
print "key:val",i, error_nr
if error_nr ==0:
count = count +1
# print count
elif error_nr > 0:
# print error_nr
handle_error(error_nr)
need_exception = True
if need_exception:
raise RND_ERROR(49374)
def numGen(input):
from random import randint
result= {}
for i in range(9):
j = (randint(0, 4))
result[i] = input+j
result.update()
# print "iteration", i, j
check_error(result)
try:
numGen(3)
except BaseException as e:
print e
finally:
print "Finished"
输出:
dict {0: 6, 1: 4, 2: 6, 3: 5, 4: 4, 5: 4, 6: 5, 7: 6, 8: 3}
key:val 0 0
key:val 1 0
key:val 2 0
key:val 3 1
RND ERROR (0x00000001): RANDOM NUMBER IS ONE
key:val 4 0
key:val 5 0
key:val 6 1
RND ERROR (0x00000001): RANDOM NUMBER IS ONE
key:val 7 0
key:val 8 1
RND ERROR (0x00000001): RANDOM NUMBER IS ONE
RND ERROR (0x0000C0DE):
Finished
关于python - 处理多个相同类型的异常并在 python 中恢复执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35089487/
对于 Metal ,如果对主纹理进行 mipmap 处理,是否还需要对多采样纹理进行 mipmap 处理?我阅读了苹果文档,但没有得到任何相关信息。 最佳答案 Mipmapping 适用于您将从中
我正在使用的代码在后端 Groovy 代码中具有呈现 GSP(Groovy 服务器页面)的 Controller 。对于前端,我们使用 React-router v4 来处理路由。我遇到的问题是,通过
我们正在 build 一个巨大的网站。我们正在考虑是在服务器端(ASP .Net)还是在客户端进行 HTML 处理。 例如,我们有 HTML 文件,其作用类似于用于生成选项卡的模板。服务器端获取 HT
我正在尝试将图像加载到 void setup() 中的数组中,但是当我这样做时出现此错误:“类型不匹配,'processing .core.PImage' does not匹配“processing.
我正在尝试使用其私有(private)应用程序更新 Shopify 上的客户标签。我用 postman 尝试过,一切正常,但通过 AJAX,它带我成功回调而不是错误,但成功后我得到了身份验证链接,而不
如何更改我的 Processing appIconTest.exe 导出的默认图标在窗口中的应用程序? 默认一个: 最佳答案 经过一些研究,我能找到的最简单的解决方案是: 进入 ...\process
我在 Processing 中做了一个简单的小游戏,但需要一些帮助。我有一个 mp3,想将它添加到我的应用程序中,以便在后台循环运行。 这可能吗?非常感谢。 最佳答案 您可以使用声音库。处理已经自带
我有几个这样创建的按钮: 在 setup() PImage[] imgs1 = {loadImage("AREA1_1.png"),loadImage("AREA1_2.png"),loadImage
我正在尝试使用 Processing 创建一个多人游戏,但无法弄清楚如何将屏幕分成两个以显示玩家的不同情况? 就像在 c# 中一样,我们有Viewport leftViewport,rightView
我一直在尝试使用 Moore 邻域在处理过程中创建元胞自动机,到目前为止非常成功。我已经设法使基本系统正常工作,现在我希望通过添加不同的功能来使用它。现在,我检查细胞是否存活。如果是,我使用 fill
有没有办法用 JavaScript 代码检查资源使用情况?我可以检查脚本的 RAM 使用情况和 CPU 使用情况吗? 由于做某事有多种方法,我可能会使用不同的方法编写代码,并将其保存为两个不同的文件,
我想弄清楚如何处理这样的列表: [ [[4,6,7], [1,2,4,6]] , [[10,4,2,4], [1]] ] 这是一个整数列表的列表 我希望我的函数将此列表作为输入并返回列表中没有重复的整
有没有办法在不需要时处理 MethodChannel/EventChannel ?我问是因为我想为对象创建多个方法/事件 channel 。 例子: class Call { ... fields
我有一个关于在 Python3 中处理 ConnectionResetError 的问题。这通常发生在我使用 urllib.request.Request 函数时。我想知道如果我们遇到这样的错误是否可
我一直在努力解决这个问题几个小时,但无济于事。代码很简单,一个弹跳球(粒子)。将粒子的速度初始化为 (0, 0) 将使其保持上下弹跳。将粒子的初始化速度更改为 (0, 0.01) 或任何十进制浮点数都
我把自己弄得一团糟。 我想在我的系统中添加 python3.6 所以我决定在我的 Ubuntu 19.10 中卸载现有的。但是现在每次我想安装一些东西我都会得到这样的错误: dpkg: error w
我正在努力解决 Rpart 包中的 NA 功能。我得到了以下数据框(下面的代码) Outcome VarA VarB 1 1 1 0 2 1 1 1
我将 Java 与 JSF 一起使用,这是 Glassfish 3 容器。 在我的 Web 应用程序中,我试图实现一个文件(图像)管理系统。 我有一个 config.properties我从中读取上传
所以我一直在Processing工作几个星期以来,虽然我没有编程经验,但我已经转向更复杂的项目。我正在编写一个进化模拟器,它会产生具有随机属性的生物。 最终,我将添加复制,但现在这些生物只是在屏幕上漂
有人知道 Delphi 2009 对“with”的处理有什么不同吗? 我昨天解决了一个问题,只是将“with”解构为完整引用,如“with Datamodule、Dataset、MainForm”。
我是一名优秀的程序员,十分优秀!