Неверный аргумент поднять исключение - PullRequest
1 голос
/ 27 января 2012

Как мне проверить мой параметр, если он вызовет исключение, фактически не вызывая его, используя try и except?

class MyClass:
    def function(parameter):
        pass

parameter - это неоднозначная функция, которая может вызывать 1 или более любых исключений, например:

parameter = pow("5", 5)

A TypeError вызывается сразу после вызова функции и до того, как функция сможет выполнить свои операторы.

Ответы [ 4 ]

1 голос
/ 27 января 2012

Насколько я понимаю, вы хотите обработать возникшие исключения, а также проверить, какие ошибки возникли для дальнейшей проверки? Вот один из способов сделать это.

class Foo(object):
    def find_errors(arg):
        errors = []
        try:
            # do something
        except TypeError as e:
            errors.append(e)
            # handle exception somehow
        except ValueError as e:
            errors.append(e)
            # handle exception somehow
        # and so on ...
        finally:
            pass #something here

        return errors, ans

Теперь вы можете проверить errors и выяснить, какие исключения были подняты.

0 голосов
/ 27 января 2012

В комментарии к другому ответу вы сказали: "parameter - это еще одна функция; возьмем, к примеру: parameter = pow("5", 5), которая вызывает TypeError, но это может быть функция любого типа и любой тип исключения.. "

Если вы хотите поймать исключение внутри вашей функции, вы должны вызвать параметр (который я предполагаю вызываемым) внутри этой функции:

def function(callable, args=()):
    try:
        callable(*args)
    except:
        print('Ops!')

Пример:

>>> function(pow, args=("5", 5))
Ops!

Это если вам действительно нужно вызвать свой «параметр» внутри функции.В противном случае вы должны управлять его поведением снаружи, возможно, с помощью чего-то вроде:

>>> try:
...     param = pow('5', 5)
... except:
...     param = 10
... 
>>> param
10
>>> function(param)

В этом примере выдавать исключение - pow, а не function, поэтому рекомендуется разделять два разныхвызовите и оберните с помощью оператора try-except код, который может завершиться с ошибкой.

0 голосов
/ 27 января 2012

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

Как это:

def foo(bar):
    pass

foo(1, 2)

Вы не можете поймать их в функции и, конечно, не в строке def foo(bar):.

Это вызывающая сторона функции, которая допустила ошибку, и именно здесь вы ловите исключение:

try:
    foo(1, 2)
except TypeError:
    print('call failed')
0 голосов
/ 27 января 2012

Если вы ожидаете, что параметр будет определенного типа, вы можете использовать type(paramter) is parametertype.

Например, если вы хотите проверить, что «i» является целым числом, выполните инструкции if(type(i) is int):

Под редакцией:

try:
    pow("5",5)
    return 0
except Exception, err:
    sys.stderr.write('ERROR: %s\n' % str(err))
    return 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...