在 Python 中拒绝负数作为例外
Reject Negative Numbers as exceptions in Python
我正在尝试 运行 一个接受数字的基本提示,然后 运行 对其进行递归函数。
任何负数都会导致递归错误,因为函数无法处理它们。
现在,我从 Python 了解到,像这种情况需要
"try/except" 型号。这是我想出的:
try:
choice = int(input('Enter a number: '))
INSERT RECURSIVE FUNCTION HERE
except RecursionError as err:
print('Error: ', str(err))
这个例外不起作用,因为它仍然以红线显示整个递归过程,我的例外只是替换了最后一行。我知道我可以很容易地通过逻辑解决这个问题,例如:
if choice < 0:
print("Error: Bro, We don't take no Negative Numbers around here.")
但是,有人告诉我我们通常希望避免在 Python 中使用 "solving errors by Logic",而是通过 "try/except" 模型工作。
如何通过 "try/except" 模型而不是 "if/else" 模型拒绝负数?
如果你能帮助我理解一种使它对 ValueError 做出反应的方法,那将是另一个很大的帮助。
"prefer try/except" 是一个准则,不是硬性规定。在这种情况下,正如您所发现的那样,它没有任何意义。您应该像往常一样使用 if choice < 0:
。
一般来说,首选 try/except
的三个原因,none 在这里适用。
- 如果您按顺序执行多个操作,每个操作都可能失败,并且您不关心哪个失败。在这种情况下,您将围绕整个代码序列使用一个 try 块,以简化事情。
- 如果您希望调用者使用用户定义类型和不实现任何特定超级class 或抽象基础class 的鸭子类型接口。在编写库代码时,这主要是一个问题。
- 如果您希望操作通常会成功,并且在失败时抛出异常。在这种情况下,try/except 通常会更快。
作为旁注,"prefer try/except" 被强调给新 Python 程序员的主要原因是许多程序员来自异常缓慢或 none 存在的语言,使他们有偏见地反对使用它们,即使在适当的时候也是如此。
比如说,你只想打印正数,如果数字是负数,你会抛出一个异常
a = int(raw_input())
if a < 0:
myError = ValueError('a should be a positive number')
raise myError
print(a)
try:
choice = int(input('Enter a number: '))
assert choice > 0 # Test if it true
except AssertionError :
print("Number is negative")
我正在尝试 运行 一个接受数字的基本提示,然后 运行 对其进行递归函数。
任何负数都会导致递归错误,因为函数无法处理它们。
现在,我从 Python 了解到,像这种情况需要 "try/except" 型号。这是我想出的:
try:
choice = int(input('Enter a number: '))
INSERT RECURSIVE FUNCTION HERE
except RecursionError as err:
print('Error: ', str(err))
这个例外不起作用,因为它仍然以红线显示整个递归过程,我的例外只是替换了最后一行。我知道我可以很容易地通过逻辑解决这个问题,例如:
if choice < 0:
print("Error: Bro, We don't take no Negative Numbers around here.")
但是,有人告诉我我们通常希望避免在 Python 中使用 "solving errors by Logic",而是通过 "try/except" 模型工作。
如何通过 "try/except" 模型而不是 "if/else" 模型拒绝负数?
如果你能帮助我理解一种使它对 ValueError 做出反应的方法,那将是另一个很大的帮助。
"prefer try/except" 是一个准则,不是硬性规定。在这种情况下,正如您所发现的那样,它没有任何意义。您应该像往常一样使用 if choice < 0:
。
一般来说,首选 try/except
的三个原因,none 在这里适用。
- 如果您按顺序执行多个操作,每个操作都可能失败,并且您不关心哪个失败。在这种情况下,您将围绕整个代码序列使用一个 try 块,以简化事情。
- 如果您希望调用者使用用户定义类型和不实现任何特定超级class 或抽象基础class 的鸭子类型接口。在编写库代码时,这主要是一个问题。
- 如果您希望操作通常会成功,并且在失败时抛出异常。在这种情况下,try/except 通常会更快。
作为旁注,"prefer try/except" 被强调给新 Python 程序员的主要原因是许多程序员来自异常缓慢或 none 存在的语言,使他们有偏见地反对使用它们,即使在适当的时候也是如此。
比如说,你只想打印正数,如果数字是负数,你会抛出一个异常
a = int(raw_input())
if a < 0:
myError = ValueError('a should be a positive number')
raise myError
print(a)
try:
choice = int(input('Enter a number: '))
assert choice > 0 # Test if it true
except AssertionError :
print("Number is negative")