微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 try/except 不捕获 NameError?

如何解决为什么 try/except 不捕获 NameError?

定义等级(分数): 尝试: 如果分数 >= .9: 返回'A' elif 分数 >= .8: 返回'B' elif 分数 >= .7: 返回'C' elif 分数 >= .6: 返回“D” elif 分数

x = 成绩(完美)

打印(x)

解决方法

错误/异常发生在 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。