【问题标题】:Restrict user from entering non-numeric value限制用户输入非数值
【发布时间】:2020-08-19 05:43:18
【问题描述】:

我正在编写一个只能使用 def() 的代码。 input() 不能在 def() 中使用。当传递一个数值时,就可以了。当提供字符串(例如,5、10 等)时,它返回 NameError。如何使用 try 和 except 解决此问题。

def num(n):
    try:
        return int(n)
    except NameError:
        print('Error: Enter numeric nalue')
        return

num(Five)

输出:NameError: name 'Five' is not defined

我正在使用 Anaconda 2020.2(Python3.7.6 64 位)

【问题讨论】:

  • 您几乎肯定没有使用 Python 3.7,您的代码不会抛出该错误,而是您使用的是 Python 2 的某个版本,它会。你真的应该使用 Python 3
  • num(Five) 这意味着您正在传递变量名称Five 它应该看起来像这样var=input('Enter the input') num(var)
  • 我已经安装了 Anaconda 2020.2,这表明它在我的控制面板中安装的程序中有 Python3.7.6。如何检查它是否是Python2。我正在使用 Windows 7。
  • @user13966865 但我不允许使用 input()
  • 你传入的是变量 Five 而不是字符串“Five”。如果你想测试一个字符串的用户输入,你应该尝试 / 除了 ValueError 而不是 NameError,并将函数作为 num(“Five”) 运行,因为用户输入将是一个字符串。

标签: python nameerror try-except


【解决方案1】:

两个问题:

  1. 当您尝试使用字符串值测试您的例程时,您尝试编写不带引号的字符串常量,因此它尝试查找不存在的变量 Five,因此是 @987654322 @。你需要在它周围加上引号(即'Five')。

  2. 在您的函数中,在非数字数据的情况下要查找的相关异常是 ValueError

这些更正的示例:

def num(n):
    try:
        return int(n)
    except ValueError:
        print('Error: Enter numeric value')
        return

print(num('Five'))

【讨论】:

    【解决方案2】:

    下面
    (想法是从函数调用中返回一个元组。第一个元组元素是一个布尔值,告诉我们是否有一个有效的 int。第二个元组元素可以是实际的 int 或解释为什么我们不能将输入转换为 int 的字符串)

    def to_int(val):
        try:
            result = int(val)
            return True,result
        except ValueError:
            return False,'{} is not a valid integer'.format(val)
            
    print(to_int(7))
    print(to_int('ttt'))
    

    输出

    (True, 7)
    (False, 'ttt is not a valid integer')
    

    【讨论】:

      【解决方案3】:

      试试这个:

      def num(n):
         try :
            return int(n)
         except:
            raise NameError("Please provide an integer value")
        
      num('five')
      

      【讨论】:

      • 你确定这会起作用吗?代码会抛出错误。 num 是一个函数,您正在尝试将 num(一个函数)转换为 int。
      • 更具体地说,return int(num) 会抛出错误。
      • 我错误地写了 num intsead of n。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      相关资源
      最近更新 更多