嵌套的try else语句的问题(issue with nested try else statement)

编程入门 行业动态 更新时间:2024-10-11 23:25:45
嵌套的try else语句的问题(issue with nested try else statement)

我是初学程序员,正在编写一个程序,将字母等级转换为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: ')

更多推荐

本文发布于:2023-08-06 09:57:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1446862.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   语句   issue   nested   statement

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!