Python - int类型的isalpha()方法不会引发ValueError错误。
Python - int类型的isalpha()方法不会引发ValueError错误。
为什么在try/except语句中,当isalpha应该失败时,没有引发ValueError错误。
我知道如果给定一个数字,isalpha会返回false。
In [9]: ans = input("输入一个字母") 输入一个字母4 In [10]: ans.isalpha() Out[10]: False
如果用户提供的是数字而不是y或n,我该如何获得值错误?因为如果try语句是false,它不应该停止为真并且不打印我的路径吗?
import sys v0 = float(input("你想要什么速度?")) g = float(input("你想要什么重力?")) t = float(input("你想要什么时间(小数)?")) print(""" 我们有以下输入。 v0 是 %d g 是 %d t 是 %d 这正确吗?[Y/n] """ % (v0, g, t)) while True: try: answer = input("\t >> ").isalpha() print(v0 * t - 0.5 * g * t ** 2) except ValueError as err: print("不是有效的输入", err.answer) sys.exit() finally: print("你还想要其他的吗?") break
例如,如果用户输入5而不是y或n,仍会得到一个答案
$ python3 ball.py 你想要什么速度?2 你想要什么重力?3 你想要什么时间(小数)?4 我们有以下输入。 v0 是 2 g 是 3 t 是 4 这正确吗?[Y/n] >> 5 -16.0 你还想要其他的吗?
在上述代码中,问题出现的原因是在输入的字符串中包含非字母字符时,并没有引发异常。为了解决这个问题,我们需要自己引发异常。
具体的解决方法如下:
try: answer = input("\t >> ").isalpha() if not answer: raise ValueError print(v0 * t - 0.5 * g * t ** 2) except ValueError as err: print("Not a valid entry", err.answer) sys.exit()
在上述代码中,我们使用了try-except语句块来捕获可能引发的异常。首先,我们使用input()函数获取用户输入的字符串,并使用isalpha()方法来检查该字符串是否只包含字母字符。如果字符串中包含非字母字符,我们会手动引发一个ValueError异常。然后,我们打印出一个错误消息,并输出err.answer来显示错误的具体原因。最后,我们使用sys.exit()函数退出程序。
值得注意的是,在代码中的err.answer并不会打印出answer的值。这是因为异常对象并没有一个名为answer的属性。
Python - No valuerror on int with isalpha
在Python中,当我们使用int()
函数将一个非数字字符串转换为整数时,通常会引发ValueError
异常。然而,有时候我们可能会遇到一个奇怪的情况,即当我们使用isalpha()
方法判断一个字符串是否只包含字母时,即使这个字符串是一个数字,也不会引发ValueError
异常。下面我们来探讨一下这个问题的原因以及解决方法。
在上述代码中,我们可以看到使用了try
和except
来捕获可能引发的ValueError
异常。然而,在这个特定的情况下,ValueError
异常并没有被引发,因为answer
的值是一个布尔值False
,而不是一个错误。
为了解决这个问题,我们可以使用条件逻辑来替代try
和except
。我们可以使用isalpha()
方法来判断用户输入的字符串是否只包含字母,如果是,则执行相应的逻辑,如果不是,则继续循环等待用户输入。
下面是一个简单的示例代码:
answer = input("\t >> ") if answer.isalpha(): print(v0 * t - 0.5 * g * t ** 2) break
在这个示例代码中,我们使用isalpha()
方法来判断用户输入的字符串是否只包含字母,如果是,则执行相应的逻辑。如果用户输入的字符串包含非字母字符,则继续循环等待用户输入。
在查找解决方法之前,我们可以看到在使用try
和except
之前,有一段对于使用条件逻辑和try
/except
的混合意见。一些人认为应该优先使用条件逻辑,而另一些人则认为应该优先使用try
/except
。然而,在这个特定的问题中,我们可以看到使用条件逻辑是更合适的解决方法。
事实上,Python的设计原则之一是"明确胜于隐式",即明确错误处理逻辑要优于隐式的错误处理。这意味着我们应该尽量使用条件逻辑来处理可能出现的错误,而不是依赖于try
/except
来捕获异常。
下面是一些关于这个问题讨论的链接:
- stackoverflow.com/q/2020598/461887
在这个链接中,有两个答案分别提到了使用try
/except
和条件逻辑的优缺点。其中一个答案中提到,当处理来自外部函数的异常时,使用try
/except
是更合适的。而在我们的问题中,我们是在对一个变量进行求值时捕获异常,所以使用条件逻辑是更好的选择。
我们可以得出结论,在处理可能出现的错误时,应该优先使用条件逻辑而不是依赖于try
/except
来捕获异常。这样可以使代码更加明确,减少不必要的异常处理逻辑。