I'm importing a module which raises the following error in some conditions: RuntimeError: pyparted requires root access
I know that I can just check for root access before the import, but I'd like to know how to catch this spesific kind of error via a try/except statement for future reference. Is there any way to differentiate between this RuntimeError and others that might be raised?
-
try: import pyparted except RuntimeError: print('RuntimeError is raised') raisemore on exception handling in tutorial.
This situation should produce
ImportErrorin my opinion. And you can do it yourself:try: import pyparted except RuntimeError as e: raise ImportError(e) -
Yes.
try: import module except RuntimeError: passimports are interpreted as any other statement, they are not special. You could do an
if condition: import module -
try: import ... except RuntimeError: # Do something -
You can check attributes of the exception to differentiate from other possible
RuntimeErrorexceptions. For example, re-raise the error if it does not match a predefined message text.try: import pypatred except RuntimeError,e: if e.message == 'RuntimeError: pyparted requires root access': return 'pyparted - no root access' raiseOf course, direct text comparison is just an example, you could search for included substrings or regular expressions.
It is worth noting that the
.messageattribute of exceptions is deprecated starting with Python 2.6. You can find the text in.args, usuallyargs[0].... For 2.6, the
messageattribute is being deprecated in favor of theargsattribute.SilentGhost : and you'll need to change this every time developers change a letter in the error message.Nadia Alramli : This is bad! you should not compare error message like that unless it is absolutely unavoidable.Paul Fisher : Unfortunately, it looks like in this case comparing the error message *is* unavoidable — pyparted doesn't appear to raise a more specific error.SilentGhost : @Paul: see my solution. -
I know that I can just check for root access before the import, but I'd like to know how to catch this spesific kind of error via a try/except statement for future reference. Is there any way to differentiate between this RuntimeError and others that might be raised?
If the error is caused by a specific condition, then I think the easiest way to catch the error is to test for the condition, and you can raise a more specific error yourself. After all the 'error' exists before the error is thrown, since in this case its a problem with the environment.
I agree with those above - text matching on an error is kind of a terrifying prospect.
0 comments:
Post a Comment