我是初学程序员,正在编写一个程序,将字母等级转换为GPA,或GPA转换为用户输入的字母等级。 我引用了两个函数来执行其他程序中的转换。 我使用try语句开始假设它是一个转换为GPA的字母等级,这不起作用我尝试将函数从GPA转换为字母等级。
我的程序有效,唯一的问题是我的else语句总是执行,即使我输入的内容不是字母等级或GPA。 我猜这很容易,我没有看到。
#Convert a letter grade to GPA, or GPA to letter grade from grade_points_to_letter import gpa_converter from letter_grade_to_grade_point import letter_converter grade = input('Enter a letter grade or GPA to convert: ') while grade != '': try: grade = grade.upper() conversion = letter_converter(grade) try: conversion = gpa_converter(float(grade)) except: print('You did not enter a valid letter grade or GPA') except: pass else: print('Your converted grade is:', conversion) grade = input('Enter a letter grade or GPA to convert: ')I am a beginner programmer and am writing a program that converts letter grades to GPA, or GPA to letter grades as entered by the user. I reference two functions to do the conversions in other programs. I am using the try statement to start by assuming it is a letter grade to convert to GPA, and that doesn't work i try the function to convert from GPA to letter grade.
My program works, the only problem is that my else statement always executes, even if I enter something that is not a letter grade or GPA. I am guessing it is something easy that I am not seeing.
#Convert a letter grade to GPA, or GPA to letter grade from grade_points_to_letter import gpa_converter from letter_grade_to_grade_point import letter_converter grade = input('Enter a letter grade or GPA to convert: ') while grade != '': try: grade = grade.upper() conversion = letter_converter(grade) try: conversion = gpa_converter(float(grade)) except: print('You did not enter a valid letter grade or GPA') except: pass else: print('Your converted grade is:', conversion) grade = input('Enter a letter grade or GPA to convert: ')最满意答案
你的内部try-except将吞下任何异常,这意味着即使gpa_converter引发异常,最外层的try套件仍然会“成功”,因此else子句将执行。
有几种方法可以解决这个问题,但涉及最少量重构的方法可能是在最里面的except子句中重新引发异常。
while grade != '': try: grade = grade.upper() conversion = letter_converter(grade) try: conversion = gpa_converter(float(grade)) except: print('You did not enter a valid letter grade or GPA') raise except: pass else: print('Your converted grade is:', conversion) grade = input('Enter a letter grade or GPA to convert: ')编辑:好的,基于您的评论,您实际需要的是这样的:
while grade != '': grade = grade.upper() try: conversion = letter_converter(grade) except Exception: try: conversion = gpa_converter(float(grade)) except Exception: print('You did not enter a valid letter grade or GPA') else: print('Your converted grade is:', conversion) else: print('Your converted grade is:', conversion) grade = input('Enter a letter grade or GPA to convert: ')Your inner try-except will swallow any exceptions, which means that even if gpa_converter raises an exception, the outermost try suite will still be 'successful' and thus the else clause will execute.
There are several ways to fix this, but the way that involves the least amount of refactoring would probably be to re-raise the exception in the innermost except clause.
while grade != '': try: grade = grade.upper() conversion = letter_converter(grade) try: conversion = gpa_converter(float(grade)) except: print('You did not enter a valid letter grade or GPA') raise except: pass else: print('Your converted grade is:', conversion) grade = input('Enter a letter grade or GPA to convert: ')Edit: Okay, based off your comments, what you're actually going for is something like this:
while grade != '': grade = grade.upper() try: conversion = letter_converter(grade) except Exception: try: conversion = gpa_converter(float(grade)) except Exception: print('You did not enter a valid letter grade or GPA') else: print('Your converted grade is:', conversion) else: print('Your converted grade is:', conversion) grade = input('Enter a letter grade or GPA to convert: ')更多推荐
发布评论