The suggestion (below) is good-practice. However, it's advanced-Python
compared to the OP's first-course progress.
What is disappointing, is that instead of general strings as file-names
the class has not been introduced to pathlib
(https://docs.python.org/3/library/pathlib.html).
PS Ethan: way-down the docs you'll find two very handy methods worth
applying as a second-attempt at this challenge!
On 28/08/25 03:41, Chris Angelico via Python-list wrote:
On Thu, 28 Aug 2025 at 01:28, Ethan Carter <ec1...@somewhere.edu> wrote:
def copy(s, d):
"""Copies text file named S to text file named D."""
with open(s) as src:
with open(d, "w") as dst:
try:
dst.write(src.read())
except Exception:
os.remove(d)
raise
In the event of an exception, you attempt to remove the destination
file BEFORE exiting the `with` statement. While that might succeed on
some platforms, it will potentially fail on others.
I would strongly recommend combining the two opens into a single with
statement. If you can guarantee a minimum Python version of 3.10
(released 2020, now in source-only-fix mode, so any fully supported
version will indeed be >=3.10), you can write it like this:
with (open(s) as src,
open(d, "w") as dst):
or this:
with (
open(s) as src,
open(d, "w") as dst,
):
If you need to support older versions of Python, this would need to be
done with backslashes, which is ugly, but still better (IMO) than
using two nested context managers.
Out of curiosity, why do you have argc and argv? Seems a bit
unnecessary. Python isn't C.
ChrisA
--
Regards,
=dn
--
https://mail.python.org/mailman3//lists/python-list.python.org