提问人:rkg125 提问时间:6/23/2023 最后编辑:rkg125 更新时间:6/24/2023 访问量:70
在 Python 中,我如何将非 int 参数传递给需要 int 参数的函数并获取我自己的错误消息
In Python, how can I pass a non-int argument to a function that expects an int argument and get my own error message
问:
当我将不是 int 的东西传递给需要 int 的函数时,我想生成我的错误消息,而不是系统错误消息。
我尝试了各种方法来做到这一点:异常、断言、测试类型为 int 的语句,但似乎没有任何效果。我总是得到的是系统生成的“语法错误”消息
有什么方法可以覆盖系统消息或添加到其中?
我最大的希望是
def square(n):
try:
m=int(n)
return m**2
except Exception as error:
print(' argument to square() must be an int ' + str(error))
但即使这样也行不通。有没有办法得到我想要的东西,或者我是否必须接受系统生成的错误?
square(5z)
File "<ipython-input-6-0a289452c433>", line 1
square(5z)
^
SyntaxError: invalid syntax
答:
0赞
richard
6/23/2023
#1
是什么让你认为你建议的代码不起作用?
https://onlinegdb.com/S0vbrhGpF
更常见的做法是只捕获您期望的内容,而不是每个异常情况。ValueError
评论
0赞
NotAName
6/23/2023
这不是问题的答案,它应该是评论。
0赞
rkg125
6/23/2023
@richard我之前尝试过您的建议,但是我在标准解释器中遇到了“语法错误”。你的onlineGDB是某种非标准的解释器,所以即使你得到了我想要的东西,这在标准环境中也不会发生。我认为 Tom Karzes 的答案是正确的:即不可能捕获语法错误。这就是我所怀疑的,但想由比我更了解的人来运行它。
0赞
richard
6/23/2023
我没有建议代码,它是您示例中具有常见缩进的代码。它在在线 Python 和标准 Python 安装中的行为与预期相同。您的解释器是非标准的,或者您以无效的方式调用它。
1赞
sublimeclemency
6/23/2023
#2
python 断言非常有用
def square(n):
is_integer = isinstance(n,int)
assert is_integer,"input must be integer"
return m**2
或者,在一行中,
def square(n):
assert isinstance(n,int),"input must be integer"
return m**2
如果有帮助,请接受我的回答!
评论
0赞
rkg125
6/23/2023
我有 python 3.8.5 和 3.7.11,但在这两个版本中,您的断言版本都不会产生“输入必须是整数”消息。我总是得到语法错误。另请注意,第 3 行应返回 n**2,以便在传递 int 时起作用。
0赞
sublimeclemency
6/25/2023
好。请参阅 Assert 关键字上的 <w3schools.com/python/ref_keyword_assert.asp>。我认为您将需要Python 3.9+
0赞
Sunny Kumar
6/23/2023
#3
将参数更正为函数 Square(5)。 您甚至可以使用 assert 来覆盖系统错误。
评论
square(5z)
square(5 * z)
5z
不是有效的 Python 令牌,因此是语法错误。如果你有语法错误(你也不希望它这样做),你的文件甚至不会编译成字节码,所以你无法控制该错误。您可以在一定程度上控制动态错误检查,但不能控制静态错误检查。我想您可以使用 ,并将导入包装在一个语句中,如果导入失败,则给出您自己的错误,但我看不出这有多大好处。importlib
try