Поймать только некоторые ошибки времени выполнения в Python

я импортирую модуль, который вызывает следующую ошибку в некоторых условиях: RuntimeError: pyparted требует корневого доступа

Я знаю, что я могу просто проверить корневой доступ перед импортом, но я хотел бы знать, как поймать этот spesific вид ошибки с помощью оператора try/except для дальнейшего использования. Есть ли способ отличить этот RuntimeError от других, которые могут быть подняты?

6 ответов


Я знаю, что я могу просто проверить корневой доступ перед импортом, но я хотел бы знать, как поймать эту ошибку spesific через оператор try/except для дальнейшего использования. Есть ли способ отличить этот RuntimeError от других, которые могут быть подняты?

Если ошибка вызвана определенным условием, то я думаю, что самый простой способ поймать ошибку-проверить условие, и вы можете сами вызвать более конкретную ошибку. После вся "ошибка" существует до возникновения ошибки, так как в этом случае это проблема со средой.

Я согласен с теми, кто выше текста соответствия на ошибку является своего рода ужасающей перспективой.


вы можете проверить атрибуты исключения, чтобы отличить от других возможных RuntimeError исключения. Например, повторно вызовите ошибку, если она не соответствует предопределенному тексту сообщения.

    try:
        import pypatred
    except RuntimeError,e:
        if e.message == 'RuntimeError: pyparted requires root access':
            return 'pyparted - no root access'
        raise

конечно, прямое сравнение текста-это просто пример, вы можете искать включенные подстроки или регулярные выражения.

стоит отметить, что исключения устарел, начиная с Python 2.6. Текст можно найти в .args обычно args[0].

... Для 2.6, то message атрибут устарел в пользу .


try:
    import pyparted
except RuntimeError:
    print('RuntimeError is raised')
    raise

подробнее о обработка исключений в учебнике.

эта ситуация должна произвести ImportError по-моему. И вы можете сделать это сами:

try:
    import pyparted
except RuntimeError as e:
    raise ImportError(e)

да.

   try:
        import module
   except RuntimeError:
         pass

imports интерпретируются как любой другой оператор, они не являются особенными. Вы могли бы сделать

if condition:
     import module

try:
   import ...
except RuntimeError:
   # Do something

RuntimeError возникает при обнаружении ошибки, которая не попадающие ни в одну из других категорий

def foo():
   try:
      foo()
   except RuntimeError, e:
      print e
      print " Runtime Error occurred due to exceeded maximum recursion depth "

вот как мы поймаем RuntimeError, вызванный превышенным пределом рекурсии в python

и если вы хотите вызвать свою функцию через предел рекурсии, вы можете сделать следующее

import sys
def foo():
     try:
        foo()
     except RuntimeError, e:
        sys.setrecursionlimit(1200)
        foo()

но всегда настоятельно не рекомендуется изменять предел рекурсии, но очень небольшие изменения в пределе рекурсии разрешено