How to 'ignore' an error in Python?

Chris Green cl at isbd.net
Sat Apr 29 03:34:41 EDT 2023


Chris Angelico <rosuav at gmail.com> wrote:
> On Sat, 29 Apr 2023 at 14:27, Kushal Kumaran <kushal at locationd.net> wrote:
> >
> > On Fri, Apr 28 2023 at 04:55:41 PM, Chris Green <cl at isbd.net> wrote:
> > > I'm sure I'm missing something obvious here but I can't see an elegant
> > > way to do this.  I want to create a directory, but if it exists it's
> > > not an error and the code should just continue.
> > >
> > > So, I have:-
> > >
> > >     for dirname in listofdirs:
> > >         try:
> > >             os.mkdir(dirname)
> > >         except FileExistsError:
> > >             # so what can I do here that says 'carry on regardless'
> > >         except:
> > >             # handle any other error, which is really an error
> > >
> > >         # I want code here to execute whether or not dirname exists
> > >
> > >
> > > Do I really have to use a finally: block?  It feels rather clumsy.
> > >
> > > I suppose I could test if the directory exists before the os.mkdir()
> > > but again that feels a bit clumsy somehow.
> > >
> > > I suppose also I could use os.mkdirs() with exist_ok=True but again
> > > that feels vaguely wrong somehow.
> > >
> >
> > Why does exist_ok=True feel wrong to you?  This is exactly what it is
> > there for.
> >
> 
> Using mkdirs when you only want to make one is inviting problems of
> being subtly wrong, where it creates too many levels of directory.
> Personally, I would just do:
> 
> try: os.mkdir(dirname)
> except FileExistsError: pass
> 
> and not try to handle anything else at all.
> 
Yes, OP here, that seems to me to be the 'right' way to do it.
Basically I hadn't realised the effect of pass in a try block and
that's why I asked the question originally.

-- 
Chris Green
·


More information about the Python-list mailing list