详解Python中的PyInputPlus模块

 更新时间:2022年05月30日 14:19:55   作者:TANGYRun  
这篇文章主要介绍了Python中的PyInputPlus模块详解,PyInputPlus包含与input()类似的、用户多种数据(数字日期、E-mail地址等)的函数,PyInputPlus还包含其他有用的功能,本文给大家介绍的非常详细,需要的朋友可以参考下

“输入验证”代码检查用户输入值,在Python中我们用的最多的是input()函数,但是有些情况下反复使用input()函数可能会遗漏某些场景,并且该函数允许无效输入通过检查。因此我们需要使用Python的第三方模块PyInputPlus进行输入验证。

PyInputPlus包含与input()类似的、用户多种数据(数字日期、E-mail地址等)的函数。如果用户输入了无效的内容,例如格式错误的日期或超出预期范围的数字,PyIputPlus会再次提示他们输入。PyInputPlus还包含其他有用的功能,例如提示用户的次数限制和时间限制(如果要求用户在时限内作出响应)。

安装PyInputPlus

PyInputPlus不是Python标准库的一部分,因此需要使用pip单独安装。命令如下:

pip install --user pyinputplus

PyInputPlus具有以下几种用于不同类型输入的函数:

inputStr()类似于内置的input()函数,但具有一般的PyInputPlus功能inputNum()确保用户输入数字并返回int或float值,这取决于数字是否包含小数点inputChoice()确保用户输入习题提供的选项之一inputMenu()与inputChoice类似,但提供一个带有数字或字母选项的菜单inputDatetime()确保用户输入日期和时间inputYesNo()确保用户输入“yes”或“no”响应inputBool()类似inputYesNo(),但接收“True”或“False”响应,并返回一个布尔值inputEmail()确保用户输入有效的E-mail地址inputFilepath()确保用户输入有效的文件路径和文件名,并可以选择检查是否存在具有该名称的文件inputPassword()类似于内置的input(),但是在用户输入时显示*字符,因此不会在屏幕上显示密码或者其他敏感信息

只要输入了无效内容,以上函数就会自动提示用户:

>>> import pyinputplus as pyip
>>> response = pyip.inputNum()
five
'five' is not a number
10
>>> response
10

每次调用PyInputPlus模块的函数时,import语句中的as pyip代码让我们不必输入pyinputplus,而是可以使用较短的pyip名称。正如可以将字符串传递给input()以提供提示一样,也可以将字符串传递给PyInputPlus模块的函数的prompt关键字参数来显示提示:

>>> import pyinputplus as pyip
>>> response = pyip.inputInt(prompt='Enter a number')
Enter a number:cat
'cat' is not an Integer.
Enter a number:10
>>> response
10

关键字参数min、max、greaterThan和lessThan

接收int和float数的inputNum()、inputInt()和inputFloat()函数还具有min、max、greaterThan和lessThan关键字参数,用于指定有效值范围,例如如下例子:

>>> import pyinputplus as pyip
>>> response = pyip.inputNum('Enter num: ', min=4)
Enter num: 3
Input must be at minimum:4
Enter num: 4
>>> response
4
>>> response = pyip.inputNum('Enter num: ', greaterThan=4)
Enter num: 4
Input must be greater than 4.
Enter num: 5
>>> response
5
>>> response = pyip.inputNum('Enter num: ', min=4, lessThan=6)
Enter num: 6
Input must be less than 6.
Enter num: 3
Input must be at minimum 4.
Enter num: 4
>>> response
4

关键字参数blank

在默认情况下,除非将blank关键字参数设置为True,否则不允许输入空格字符:

>>> import pyinputplus as pyip
>>> response = pyip.inputNum('Enter num: ')
Enter num: (blank input entered here)
Blank values are not allowed.
Enter num: 40
>>> response
40
>>> response = pyip.inputNum(blank=True)
(blank input entered here)
>>> response
''

如果想使输入可选,使用blank=True,这样用户不需要输入任何内容。

关键字参数limit、timeout和default

在默认情况下,PyInputPlus模块的函数在程序运行时会一直要求用户提供有效输入,如果希望某个函数在经过一定次数的尝试或一定的时间后停止要求用户输入,就可以使用limit和timeout关键字参数。用limit关键字参数传递一个整数,以确定PyInputPlus的函数在放弃之前尝试接受有效输入多少次。用timeout关键字参数传递一个整数,以确定用户在多少秒之内必须提供有效输入,然后PyInputPlus模块的函数会放弃。

如果用户未能提供有效输入,那么这些关键字参数将分别导致函数引发RetryLimitException或TimeoutException异常。

当你使用这些关键字参数并传入default关键字参数时,该函数将返回默认值,而不是引发异常。例如:

response = pyip.inputNum(limit=2, default='N/A')
hello
'hello' is not a number
world
'world' is not a number
>>> response
'N/A'

inputNum()函数使用了default关键字参数后不会引发RetryLimitException,只会返回字符串‘N/A’.

关键字参数allowRegexes和blockRegexes

我们也可以使用正则表达式指定输入是否被接受。关键字参数allowRegexes和blockRegexes利用正则表达式字符串列表来确定PyInputPlus模块的函数将接受或拒绝哪些内容作为有效输入。例如,使用inputNum()函数将接收罗马数字以及常规数字作为有效输入:

import pyinputplus as pyip
>>> response = pyip.inputNum(allowRegexes=[r'(I|V|X|L|C|D|M)+', r'zero'])
XLII
>>> response
'XLII'

我们还可以用blockRegexes关键字参数指定PyInputPlus模块的函数不接收的正则表达式字符串列表:

import pyinputplus as pyip
>>> response = pyip.inputNum(blockRegexes=[r'[02468]$'])
42
This response is invalid.
43
>>> response
43

如果同时指定allowRegexes和blockRegexes参数,那么允许列表将优先于阻止列表。例如:

import pyinputplus as pyip
>>> response = pyip.inputStr(allowRegexes=[r'caterpillar', 'category'], blockRegexes=[r'cat'])
cat
This response is invalid
catastrophe
This response is invalid
category
>>> response
'category'

将自定义验证函数传递给inputCustom()

可以编写函数以执行自定义的验证逻辑,并将函数传递给inputCustom()。例如,我们可以创建自己的addsUpToTen()函数,然后将其传递给inputCustom()。注意,函数调用看起来像inputCustom(addsUpToTen),而不是inputCustom(addsUpToTen()),因为我们是将addsUpToTen()函数本身传递给inputCustom(),而不是调用addsUpToTen()函数并传递其返回值:

import pyinputplus as pyip
def addsUpToTen(numbers):
    numbersList = list(numbers)
    for i,digit in enumerate(numersList):
        numbersList[i] = int(digit)
    if sum(numbersList) != 10:
        raise Exception('The digits must add up to 10,not %s. ' %(sum(numbersList)))
    return int(number)
>>> response = pyip.inputCustom(addsUpToTen)
123
The digit must add up to 10,not 6.
55
>>> response
55

inputCustom()函数还支持常规的PyInputPlus功能,该功能可通过blank、limit、timeout、default、allowRegexes和blockRegexes关键字参数实现。

到此这篇关于Python中的PyInputPlus模块详解的文章就介绍到这了,更多相关Python PyInputPlus模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • dataframe 按条件替换某一列中的值方法

    dataframe 按条件替换某一列中的值方法

    今天小编就为大家分享一篇dataframe 按条件替换某一列中的值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python中有帮助函数吗

    python中有帮助函数吗

    在本篇文章里小编给大家分享的是一篇关于python帮助函数详解内容,有兴趣的朋友们可以学习下。
    2020-06-06
  • 关于python中map函数的使用

    关于python中map函数的使用

    这篇文章主要介绍了关于python中map函数的使用,map函数也是python中的一个内置函数,用法同之前讲过的filter函数类似,需要的朋友可以参考下
    2023-04-04
  • Python实战小项目之Mnist手写数字识别

    Python实战小项目之Mnist手写数字识别

    MNIST 数据集已经是一个被”嚼烂”了的数据集, 很多教程都会对它”下手”, 几乎成为一个 “典范”. 不过有些人可能对它还不是很了解, 下面通过一个小实例来带你了解它
    2021-10-10
  • python采用django框架实现支付宝即时到帐接口

    python采用django框架实现支付宝即时到帐接口

    这篇文章主要介绍了python采用django框架实现支付宝即时到帐接口的相关资料,需要的朋友可以参考下
    2016-05-05
  • 如何通过python实现IOU计算代码实例

    如何通过python实现IOU计算代码实例

    这篇文章主要介绍了如何通过python实现IOU计算代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Python探索之爬取电商售卖信息代码示例

    Python探索之爬取电商售卖信息代码示例

    这篇文章首先简单介绍了网络爬虫的基本概念,然后向大家分享了一段有关爬取电商售卖信息的实例代码,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • python制作一个桌面便签软件

    python制作一个桌面便签软件

    这篇文章主要介绍了python制作一个桌面便签软件分别给大家附上ubuntu和windows版的程序及源码,有需要的小伙伴可以参考下。
    2015-08-08
  • Python中常用的os操作汇总

    Python中常用的os操作汇总

    这篇文章主要汇总了Python中常用的os操作,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-11-11
  • 关于Python网络爬虫框架scrapy

    关于Python网络爬虫框架scrapy

    这篇文章主要介绍了关于Python网络爬虫框架scrapy,爬虫框架是实现爬虫功能的一个软件结构和功能组件的集合,需要的朋友可以参考下
    2023-04-04

最新评论