【问题标题】:Why doesn't the try/except catch the NameError?为什么 try/except 不能捕获 NameError?
【发布时间】:2021-06-27 13:42:43
【问题描述】:

def 成绩(分数): 尝试: 如果分数 >= .9: 返回“A” elif 分数 >= .8: 返回'B' elif 分数 >= .7: 返回“C” elif 分数 >= .6: 返回'D' elif 分数

x = 成绩(完美)

打印(x)

【问题讨论】:

    标签: try-catch except


    【解决方案1】:

    错误/异常发生在 x = grades(perfect) 而不是在你的函数等级内,你有你的 try/except 块。编译器不允许将未定义的变量(完美)用作参数。

    虽然没有多大意义,但请尝试以下方法:

    try:
      x = grades(perfect)
    except NameError:
      print('bad score')
    

    为了使函数等级在 try/catch 方面有意义,您总是将定义的变量作为参数传递,然后将变量转换为浮点数(对于这种特定情况)。如果变量是字符串,那么您可以捕获 ValueError 异常。如果变量为 = None,则捕获 TypeError 异常:

    def grades(score): 
      try: 
        _score = float(score)
        if _score >= .9: return 'A' 
        elif _score >= .8: return 'B' 
        elif _score >= .7: return 'C' 
        elif _score >= .6: return 'D' 
        elif _score <= .59: return 'F' 
        else: return 'Bad Score' 
      except ValueError: print('bad score')
      except TypeError: print('bad score')
    

    x = 成绩('完美')

    打印(x)

    完美=无

    x = 成绩(完美)

    打印(x)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-17
      • 2020-06-25
      • 2021-05-13
      • 2012-04-14
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多