Если вы хотите, чтобы метод click
работал в Chrome, Firefox и т. д., примените следующий стиль к вашему входному файлу. Это будет прекрасно скрыто, это похоже на display: none;
#fileInput {
visibility: hidden;
position: absolute;
top: 0;
left: -5000px;
}
. Это просто, я протестировал его!
Чтобы иметь возможность автоматически выдавать ошибку, когда x становится меньше нуля на протяжении всей функции. Вы можете использовать дескрипторы классов . Вот пример:
class LessThanZeroException(Exception):
pass
class variable(object):
def __init__(self, value=0):
self.__x = value
def __set__(self, obj, value):
if value < 0:
raise LessThanZeroException('x is less than zero')
self.__x = value
def __get__(self, obj, objType):
return self.__x
class MyClass(object):
x = variable()
>>> m = MyClass()
>>> m.x = 10
>>> m.x -= 20
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "my.py", line 7, in __set__
raise LessThanZeroException('x is less than zero')
LessThanZeroException: x is less than zero
Единственное, что действительно не так в этом подходе, - это то, что трудно создать очень описательное исключение с помощью операторов assert. Если вы ищете более простой синтаксис, помните, что вы можете также сделать что-то вроде этого:
class XLessThanZeroException(Exception):
pass
def CheckX(x):
if x < 0:
raise XLessThanZeroException()
def foo(x):
CheckX(x)
#do stuff here
Другая проблема заключается в том, что использование assert для нормальной проверки условий состоит в том, что затрудняет отключение отладочных утверждений с использованием флага -O.
Утверждения следует использовать для проверки условий, при которых никогда не должно происходить . Целью является ранний сбой в случае поврежденного состояния программы.
Исключения следует использовать для ошибок, которые предположительно могут произойти, и вы почти всегда должны создавать свои собственные классы исключений .
Для Например, если вы пишете функцию для чтения из файла конфигурации в dict
, неправильное форматирование в файле должно вызвать ошибку ConfigurationSyntaxError
, в то время как вы можете подтвердить
], что вы не собираетесь возвращать Нет
.
В вашем примере, если x
- это значение, установленное через пользовательский интерфейс или из внешнего источника, лучше всего исключить .
Если x
установлен только вашим собственным кодом в той же программе,
В дополнение к другим ответам, сами заявляют исключения, но только AssertionErrors. С утилитарной точки зрения утверждения не подходят, когда вам нужен точный контроль над тем, какие исключения вы перехватываете.
Операторы assert удаляются при оптимизации компиляции . Итак, да, есть различия как в производительности, так и в функциональности.
Текущий генератор кода не генерирует код для оператора assert, когда во время компиляции запрашивается оптимизация. - Python 2.6.4 Docs
Если вы используете assert
для реализации функциональности приложения, а затем оптимизируете развертывание в производственной среде, вы столкнетесь с проблемой «но-это-работает-в-разработке» дефекты.
См. PYTHONOPTIMIZE и -O -OO