使用try验证字符串,但在python中除外

时间:2015-07-12 15:50:50

标签: python try-except

我一直试图让这段代码起作用:


ans2 = ans1;
    ans2.area(); // 22;object assigns by reference, so when you call the function on second copy object then it like calling on the same object, thats why the same answer

它不起作用,我认为是因为 last_bits_repeat= "yes" while last_bits_repeat== "yes": try: another_number_repeat= input("do you have another number to add??") another_number_repeat= str(another_number_repeat) except TypeError as e: if not repeat: print("You left this empty, please write something!") last_bits_repeat= "yes" else: print("This is not empty, but invalid")

我的问题是我应该使用哪个例外来验证字符串?用户应输入“是”或“否”。

2 个答案:

答案 0 :(得分:0)

  

它没有用,我认为是因为TypeError。

如果这是python2(使用from __future__ import print_function),它不起作用,因为input没有做到你期望它 - 也就是说它没有分配输入到another_number_repeat变量的值使用raw_input代替。

在python3中,输入很好,但它不会引发异常。

  

我的问题是我应该使用哪个例外来验证字符串? (another_number_repeat)如果我可以的话。

您不需要例外。试试这个:

def get_choice(prompt, choices):
    valid = False
    while not valid:
        answer = raw_input(prompt).strip()
        valid = answer in choices
    return answer

answer = get_choice('do you have another number to add?', ['yes', 'no'])
  

我之前已将此代码用于整数,因此我认为它应该使用正确的异常。

如果要对任意输入(数字,文本,选项)使用相同的代码,正则表达式有助于避免繁琐的异常检查,并保持代码光滑:

import re
def get_input(prompt, regexp, convert=str):
    valid = False
    while not valid:
        answer = raw_input(prompt).strip()
        valid = re.match(regexp, answer)
    return convert(answer)

get_input('add a number? (yes or no)', r'(yes)|(no)')
get_input('number?', r'^[0-9]*$', int)

答案 1 :(得分:0)

我通常在这些例外“弄清楚”问题中做了什么:

  1. 删除整个try:except:clause
  2. 运行脚本并生成无效数据
  3. 观看将打印异常名称的错误消息  如果您期望多种错误类型,请为每个测试用例运行测试用例:        --blank条目(用户点击的地方)         - 用户输入八进制代码等
  4. 重新创建try:except :,指定步骤#3中的例外名称
  5. 找出异常代码的示例代码:

        last_bits_repeat= "yes"
        while last_bits_repeat== "yes":
    
                another_number_repeat= input("do you have another number to add??")
                another_number_repeat= str(another_number_repeat)