7 错误及异常处理

1.编写一个计算减法的方法,当第一个数小于第二个数时,抛出“被减数不能小于减数"的异常。
class Sub(Exception):
    def __init__(self, x, y):
        self.x = x
        self.y = y


try:
    a = int(input('请输入被减数'))
    b = int(input('请输入减数'))
    if a < b:
        raise Sub(a, b)
except Sub as error:
    print('异常原因:被减数%d不能小于减数%d' % (error.x, error.y))
else:
    c = a - b
    print('%d减%d的结果为%d' % (a, b, c))

输出结果:
请输入被减数>? 0
请输入减数>? 1
异常原因:被减数0不能小于减数1

请输入被减数>? 4
请输入减数>? 2
4减2的结果为2
2.编写程序,提示输入两个数字a、b,并进行a与b的除法运算,把运算结果打印出来。要求对输入和程序进行检测,可以排除所有的错误。(可以使用以下的异常检查下面的错误:IOError、ValueError、ZeroDivisionError等,不能使用BaseException异常)。
方法一:
def division() :
    try :
        a, b = int(input("输入两个数字以完成除法(a/b):"))
        print("{} / {} = {}".format(a, b, c))

    except ZeroDivisionError :
        print("Error: The divisor can not be zero")  # 除数不能为零!
    except IOError :
        print("Error:Wrong input or output")  # 输入或输出错误”
    except ValueError :
        print("Error:Wrong value,变量应为数值类型!")  # 值错误
    except NameError :
        print("Error: No characters or strings 变量缺少")  # 使用了没有定义的对象,没有字符或字符串
    except SyntaxError :
        print("Error:No symbols or whitespaces")  # 语法错误:无符号或空格
    except TypeError :
        print("Error: The data type is wrong and must be number")  # 数据类型错误,必须要求除数和被除数是数字,不能是字符串或者其他
    else :
        print(a, '/', b, '=', c)


输出结果:
3/0 Traceback (most recent call last): File "D:\Anaconda\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-31-f6cc6d14333b>", line 1, in <module> 3/0 ZeroDivisionError: division by zero 8/2 Out[33]: 4.0 hhhhj/7 NameError: name 'hhhhj' is not defined



方法二:
try: a = int(input("Please input the first number: ")) b = int(input("Please input the second number: ")) c = a / b print("{} / {} = {}".format(a, b, c)) except IOError: print("You input a non-number!") except ValueError: print("You input a non-number!") except ZeroDivisionError: print("You can not divide a number by zero!") else: print("Division done!") 输出结果: 请输入a的值:>? 3 请输入b的值:>? 2 a除以b的结果是:1.5 请输入a的值:>? q 输入不是正确的数字,请重新输入: 请输入a的值:>? f 输入不是正确的数字,请重新输入:
3、定义函数,在控制台中获取成绩(1-100),如果输入有误,请重新输入。
class OutOfRange(Exception) :
    def __init__(self, x) :
        self.x = x
        self.x = "输入有误,请重新输入"


def grades() :
    try :
        x = int(input("请输入[0,100]之间的分数:\n"))
        if x < 0 or x > 100 :
            raise OutOfRange(x)
    except OutOfRange as er :
        print(er.x)
    else :
        print("你的成绩为", x)


grades()

输出结果:
100
你的成绩为 100
-80
输入有误,请重新输入
120
输入有误,请重新输入
# 方法二:
def score() :
    global score
    try :

        score = int(input('请输入学生的成绩:'))
        assert 0 <= score <= 100  # 断言 成绩必须在0-100范围内
        if score >= 90 :
            print("输入正确,成绩为:A ,优秀")
        if 80 <= score < 90 :
            print("输入正确,成绩为:B,良好")
        if 60 <= score < 80 :
            print("输入正确,成绩为:C,合格")
        if score < 60 :
            print("输入正确,成绩为:D,不及格")
    except ValueError :
        print("输入有误,输入必须为整数,请重新输入")
    except AssertionError :  # 断言异常信息
        print("输入有误,输入的成绩{},不在0-100范围内请重新输入,".format(score))
    else :  # 可选项,必须try-except语句为前提
        print("程序正常运行,没有捕捉到异常")


score()

输出结果: 请输入学生的成绩:
>? 99 输入正确,成绩为:A ,优秀 程序正常运行,没有捕捉到异常 请输入学生的成绩:>? 55 输入正确,成绩为:D,不及格 程序正常运行,没有捕捉到异常 请输入学生的成绩:>? 66 输入正确,成绩为:C,合格 程序正常运行,没有捕捉到异常 请输入学生的成绩:>? -98 输入有误,输入的成绩-98,不在0-100范围内请重新输入,

 

方法一:

def division() :
    try :
        a, b = int(input("输入两个数字以完成除法(a/b):"))
        print("{} / {} = {}".format(a, b, c))

    except ZeroDivisionError :
        print("Error: The divisor can not be zero")  # 除数不能为零!
    except IOError :
        print("Error:Wrong input or output")  # 输入或输出错误”
    except ValueError :
        print("Error:Wrong value,变量应为数值类型!")  # 值错误
    except NameError :
        print("Error: No characters or strings 变量缺少")  # 使用了没有定义的对象,没有字符或字符串
    except SyntaxError :
        print("Error:No symbols or whitespaces")  # 语法错误:无符号或空格
    except TypeError :
        print("Error: The data type is wrong and must be number")  # 数据类型错误,必须要求除数和被除数是数字,不能是字符串或者其他
    else :
        print(a, '/', b, '=', c)

输出结果:

3/0
Traceback (most recent call last):
  File "D:\Anaconda\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-31-f6cc6d14333b>", line 1, in <module>
    3/0
ZeroDivisionError: division by zero

8/2
Out[33]: 4.0

    hhhhj/7
NameError: name 'hhhhj' is not defined

方法二:

try:
    a = int(input("Please input the first number: "))
    b = int(input("Please input the second number: "))
    c = a / b
    print("{} / {} = {}".format(a, b, c))
except IOError:
    print("You input a non-number!")
except ValueError:
    print("You input a non-number!")
except ZeroDivisionError:
    print("You can not divide a number by zero!")
else:
    print("Division done!")

输出结果:
请输入a的值:>? 3
请输入b的值:>? 2
a除以b的结果是:1.5

请输入a的值:>? q
输入不是正确的数字,请重新输入:
请输入a的值:>? f
输入不是正确的数字,请重新输入:

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:7 错误及异常处理 - Python技术站

(0)
上一篇 2023年3月31日 下午9:06
下一篇 2023年3月31日

相关文章

  • 3.流程控制语句

    1.已知点的坐标(x, y),判断其所在的象限。 x = int(input(“请输入x的坐标:”)) y = int(input(“请输入y的坐标:”)) if x > 0 and y > 0 : print(“第一象限”) elif x < 0 <= y : print(“第二象限”) elif x < 0 and y &l…

    Python开发 2023年3月31日
    00
  • 5 组合数据类型

    1.已知列表li_num1 = [4, 5, 2, 7]和li_num2 = [3, 6],请将这两个列表合并为一个列表,并将合并后的列表中的元素按降序排列。 1 # 方法一 2 li_num1 = [4, 5, 2, 7, ] 3 li_num2 = [3, 6] 4 # extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来…

    Python开发 2023年3月31日
    00
合作推广
合作推广
分享本页
返回顶部