输入不当需要打印出错误信息;验证
Need to print out error messages for improper input; validation
我正在编写一个 python 脚本,我在其中找到三个数字之和的平均值。我正在使用参数来输入数字。我需要通过打印出错误消息来完成脚本。
如果我输入类似:
平均 3 3 5
平均 3 3 4 5 6
avg3 3 一 5
它需要打印一个错误告诉我如何使用它。
这是脚本的开头:
def main():
num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
num3 = int(sys.argv[3])
avg = (num1 + num2 + num3)/3
print("The average of " +str(num1) + " " + str(num2) + " " + str(num3) + " " + "is " + str(round(avg,2)))
如果您正在谈论捕获 one
arg 作为错误,您可以简单地捕获 value
错误。
def main():
try:
num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
num3 = int(sys.argv[3])
avg = (num1 + num2 + num3)/3
print("The average of " +str(num1) + " " + str(num2) + " " + str(num3) + " " + "is " + str(round(avg,2)))
except ValueError:
print("All your values need to be ints")
这将确保作为 arg 传入的数字以外的任何内容都会导致消息 All your values need to be ints
。
这不会捕获任何其他错误,因此您必须单独捕获它们。例如,您的第一个仅传递 2 个值的示例将不起作用,因为没有 num3
,但我假设这不是您在此处询问的内容。
编辑:
用于检查强制输入 3 个数字,以及错误检查:
def main():
if len(sys.argv) != 4:
print("You did not enter the correct amount of arguments")
else:
try:
num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
num3 = int(sys.argv[3])
avg = (num1 + num2 + num3)/3
print(f"The average of {num1} {num2} {num3} is {round(avg, 2)}")
except (UnboundLocalError, IndexError) as e:
# When you don't pass any args
print("You need to pass arguments")
print(f"($ python avg.py 3 1 2)\n Error = {e}")
except ValueError as e:
# You need to use numbers
print(f"You need to pass arguments as ints")
print(f"(1 or 432. not 1.2, 324.0)\n Error = {e}")
print(f"(1 or 432. not 1.2, 324.0)\n Error = {e}")
解释见下:
当有 3 个参数时,len(sys.argv)
将是 4
(尝试 print(sys.argv)
探索这个)
您可以使用 try
语句来捕获和 except
传递参数时的两个常见异常:
def main():
try:
num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
num3 = int(sys.argv[3])
avg = (num1 + num2 + num3)/3
print(f"The average of {num1} {num2} {num3} is {round(avg, 2)}")
except (UnboundLocalError, IndexError) as e:
# When you don't pass any args
print("You need to pass arguments")
print(f"($ python avg.py 3 1 2)\n Error = {e}")
except ValueError as e:
# You need to use numbers
print(f"You need to pass arguments as ints")
print(f"(1 or 432. not 1.2, 324.0)\n Error = {e}")
try
将 运行 一个块,而 except
将 运行 当在 try
块中遇到列出的异常时(退出 try
循环)。
您还可以将代码简化为:
nums = [int(x) for x in sys.argv[1:4]]
avg = sum(nums)/3
并使用
访问您的号码
# Same as nums1
nums[0]
并将传入参数的长度更改为任何值>= 1
(如果需要):
def main():
try:
nums = [int(x) for x in sys.argv[1:len(sys.argv)]]
avg = sum(nums)/len(nums)
print(f"The average of {', '.join([str(x) for x in nums])} is {round(avg, 2)}")
except (UnboundLocalError, IndexError, ZeroDivisionError) as e:
# When you don't pass any args
print("You need to pass arguments")
print(f"($ python avg.py 3 1 2)\n Error = {e}")
except ValueError as e:
# You need to use numbers
print(f"You need to pass arguments as ints")
print(f"(1 or 432. not 1.2, 324.0)\n Error = {e}")
我正在编写一个 python 脚本,我在其中找到三个数字之和的平均值。我正在使用参数来输入数字。我需要通过打印出错误消息来完成脚本。 如果我输入类似:
平均 3 3 5
平均 3 3 4 5 6
avg3 3 一 5
它需要打印一个错误告诉我如何使用它。
这是脚本的开头:
def main():
num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
num3 = int(sys.argv[3])
avg = (num1 + num2 + num3)/3
print("The average of " +str(num1) + " " + str(num2) + " " + str(num3) + " " + "is " + str(round(avg,2)))
如果您正在谈论捕获 one
arg 作为错误,您可以简单地捕获 value
错误。
def main():
try:
num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
num3 = int(sys.argv[3])
avg = (num1 + num2 + num3)/3
print("The average of " +str(num1) + " " + str(num2) + " " + str(num3) + " " + "is " + str(round(avg,2)))
except ValueError:
print("All your values need to be ints")
这将确保作为 arg 传入的数字以外的任何内容都会导致消息 All your values need to be ints
。
这不会捕获任何其他错误,因此您必须单独捕获它们。例如,您的第一个仅传递 2 个值的示例将不起作用,因为没有 num3
,但我假设这不是您在此处询问的内容。
编辑:
用于检查强制输入 3 个数字,以及错误检查:
def main():
if len(sys.argv) != 4:
print("You did not enter the correct amount of arguments")
else:
try:
num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
num3 = int(sys.argv[3])
avg = (num1 + num2 + num3)/3
print(f"The average of {num1} {num2} {num3} is {round(avg, 2)}")
except (UnboundLocalError, IndexError) as e:
# When you don't pass any args
print("You need to pass arguments")
print(f"($ python avg.py 3 1 2)\n Error = {e}")
except ValueError as e:
# You need to use numbers
print(f"You need to pass arguments as ints")
print(f"(1 or 432. not 1.2, 324.0)\n Error = {e}")
print(f"(1 or 432. not 1.2, 324.0)\n Error = {e}")
解释见下:
当有 3 个参数时,
len(sys.argv)
将是 4
(尝试 print(sys.argv)
探索这个)
您可以使用 try
语句来捕获和 except
传递参数时的两个常见异常:
def main():
try:
num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
num3 = int(sys.argv[3])
avg = (num1 + num2 + num3)/3
print(f"The average of {num1} {num2} {num3} is {round(avg, 2)}")
except (UnboundLocalError, IndexError) as e:
# When you don't pass any args
print("You need to pass arguments")
print(f"($ python avg.py 3 1 2)\n Error = {e}")
except ValueError as e:
# You need to use numbers
print(f"You need to pass arguments as ints")
print(f"(1 or 432. not 1.2, 324.0)\n Error = {e}")
try
将 运行 一个块,而 except
将 运行 当在 try
块中遇到列出的异常时(退出 try
循环)。
您还可以将代码简化为:
nums = [int(x) for x in sys.argv[1:4]]
avg = sum(nums)/3
并使用
访问您的号码# Same as nums1
nums[0]
并将传入参数的长度更改为任何值>= 1
(如果需要):
def main():
try:
nums = [int(x) for x in sys.argv[1:len(sys.argv)]]
avg = sum(nums)/len(nums)
print(f"The average of {', '.join([str(x) for x in nums])} is {round(avg, 2)}")
except (UnboundLocalError, IndexError, ZeroDivisionError) as e:
# When you don't pass any args
print("You need to pass arguments")
print(f"($ python avg.py 3 1 2)\n Error = {e}")
except ValueError as e:
# You need to use numbers
print(f"You need to pass arguments as ints")
print(f"(1 or 432. not 1.2, 324.0)\n Error = {e}")