【发布时间】:2021-11-09 14:54:11
【问题描述】:
我有一个决策函数,如果输入的长度小于 2,则会引发错误并移动到下一个输入;如果输入的长度> = 2,则没有错误并且执行此输入。但是,我有在这个 try-except-else 中添加 raise-exception 的问题。
一个非常简化的版本是这样的:
x = 3
try:
assert (x < 2)
print("only one class")
except:
assert(x > 1)
print("processing this quad")
else:
print("moving to next quad")
# output is "processing this quad"
x = 1
try:
assert(x < 2)
print("only one class")
except:
assert(x > 1)
print("processing this quad")
else:
print("moving to next quad")
# output is "only one class
moving to next quad"
理想情况下,我的 raise 异常会以同样的方式工作。如果输入 =2,则处理此输入。但是,似乎异常引发与 Else 不兼容,我收到以下错误。 (输入是一个名为 unique_cc 的列表的长度。这里,unique_cc = 1)。 我希望它引发异常,然后打印“移至下一个”。有人帮我解决这个问题吗?
try:
assert(len(unique_cc) < 2)
raise Exception("Data has only 1 non-zero class - rejected for random forest.")
except:
assert(len(unique_cc) > 1)
print("processing this quad")
else:
print("moving to next quad")
【问题讨论】:
-
嗯,是的 - 这就是引发异常的全部要点:分解本地控制流并让下一个异常处理程序决定接下来应该发生什么。
try/except/else上的else块的全部要点 是包含仅在try块不 引发时发生 的代码一个例外。我不明白你希望它如何工作,或者你希望通过这种方式解决什么问题。 -
" 引发错误并移至下一个输入" 因此没有意义。如果你想显示一个错误,那么你可以使用例如
print。但是 raise 的全部意义在于声明在逻辑上不可能 只是“移动到下一个输入”。您无法在本地处理的问题除外。 -
使用 if 语句。 try-except 块不适用于常见的逻辑门。
-
您可能不想将 assert 用于运行时逻辑。优化的 Python 运行时(即使用 -O 选项启动时)禁用断言
-
嗨@KarlKnechtel,我特别想要一个错误,因为我需要在数据库中记录错误 - 然后数据库会做一些事情 - 另一个不相关的故事。
标签: python error-handling try-except