限制用户输入非数字值

问题描述

我正在编写仅应使用def()的代码。 input()不能在def()内部使用。传递数值后就可以了。提供字符串(例如,五,十等)时,它将返回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位)

解决方法

两个问题:

  1. 当您尝试使用字符串值测试例程时,您正在尝试对不带引号的字符串常量进行编码,因此它试图查找不存在的变量Five ,因此NameError。您需要用引号引起来(例如'Five')。

  2. 在函数内,对于非数字数据,要查找的相关异常是ValueError

已更正以下示例:

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

print(num('Five'))
,

在下面
(这个想法是从函数调用中返回一个元组。第一个tuple元素是一个布尔值,告诉我们是否有一个有效的int。第二个tuple元素可以是实际的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')
,

尝试一下:

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