如何访问NameError中的name?

2024-10-03 09:09:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想捕捉一个名称错误,然后访问该名称并使用它来提供更好的消息。如何访问导致错误的名称而不分析错误消息?你知道吗

try:
    love_bug = herbie
except NameError as err:
    name = get_name(err)
    print(name, 'unknown.')

换句话说,如何在上面的代码中实现get_name()?你知道吗


Tags: name名称消息getas错误bugunknown
3条回答
def get_name(err):
    last = err.find("' ")
    return err[6:last]
try:
    love_bug= heribie
except NameError  as err:
    print(get_name(err.args[0]), "unknown")

必须从NameError.args[0]中拖动名称:

>>> try:
...     print(foo)
... except NameError as e:
...     print(re.search("'(?P<name>.+?)'", e.args[0]).group('name'))
...
foo

如果我能很好地理解你的问题,你可以制造你自己的错误,比如:

class ValidateName(NameError):
    def __init__(self, name):
        # Call the base class constructor with the parameters it needs
        super().__init__(self, "unknown name " + name) #or whatever you need to add

try:
  love_bug = "herbie"
  raise ValidateName(love_bug) #there is no point in raising the exception manually here, I did this only to show how the message is shown,obliviously somewhere in your code the exception is raised 
except ValidateName as err:
  print(err)

(ValidateName(...), 'unknown name herbie')

相关问题 更多 >