Как разобрать ValueError в Python без разбора строки? - PullRequest
0 голосов
/ 01 декабря 2018

Я запускаю программирование и получаю ожидаемый вывод ValueError:

ValueError: {'code': -123, 'message': 'This is the error'}

Я не могу понять, как проанализировать эти данные и просто принять значение кода (или сообщения),Как я могу просто получить code значение ValueError?

Я пробовал следующее:

  • e.code
    • AttributeError: 'ValueError' object has no attribute 'code'
  • e['code']
    • TypeError: 'ValueError' object is not subscriptable
  • json.loads(e)
    • TypeError: the JSON object must be str, bytes or bytearray, not 'ValueError'

Каков питонский способ сделать это?

Редактировать

Единственное, что делает работу, это взять строковый индекс,но я не хочу этого делать, так как чувствую, что это не очень питонично.

Ответы [ 3 ]

0 голосов
/ 01 декабря 2018

Класс исключений ValueError имеет атрибут args, представляющий собой tuple аргументов, данных конструктору исключений.

>>> a = ValueError({'code': -123, 'message': 'This is the error'})
>>> a
ValueError({'code': -123, 'message': 'This is the error'})
>>> raise a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: {'code': -123, 'message': 'This is the error'}
>>> dir(a) # removed all dunder methods for readability.
['args', 'with_traceback']
>>> a.args
({'code': -123, 'message': 'This is the error'},)
>>> a.args[0]['code']
-123
0 голосов
/ 01 декабря 2018

ValueError является типом dict.Таким образом, вы можете использовать e.get ("ключ") для доступа к любому полю внутри dict.

0 голосов
/ 01 декабря 2018

Вы должны получить values() прямо из словаря, а не e.Попробуйте это:

try:
     ValueError= {'code': -123, 'message': 'This is the error'}
     Value = ValueError.get('code')
     print Value
except Exception as e:
    pass
...