On Sat, 24 Jun 2017 09:23 pm, mbyrne...@gmail.com wrote: > On Saturday, June 24, 2017 at 11:31:11 AM UTC+1, Steve D'Aprano wrote: >> What's the right/best way to test whether an object is an exception ahead of >> time? (That is, without trying to raise from it.) >> >> I have: >> >> return (isinstance(obj, type) and issubclass(obj, BaseException) >> or isinstance(obj, BaseException)) >> >> >> Any better ideas?
> Would something along these lines help? > > import exceptions py> import exceptions Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named 'exceptions' What module are you importing? > if 'ArithmeticError' in dir(exceptions): > print 'is an exception' I don't understand that. I'm not looking for strings which happen to match the names of built-in exceptions, I'm looking to test for any object which is an exception. To be an exception, you must inherit from BaseException. (String exceptions did work until Python 2.5, but I don't care about them.) > try: > if exceptions.__getattribute__('ArithmeticError'): You shouldn't call __getattribute__ directly -- that's reserved for Python's use. You should call getattr() with an optional default value: if getattr(exceptions, 'ArithmeticError', False): print 'is an exception' else: print 'is an exception' But in any case, no, I don't want to look up a string in some list of exceptions. That won't test for exceptions that aren't in the list. class MyCustomException(LookupError): pass -- Steve “Cheer up,” they said, “things could be worse.” So I cheered up, and sure enough, things got worse. -- https://mail.python.org/mailman/listinfo/python-list