英文:
Python using the try and except keywords for returning directory errors
问题
In the Python code below, I created a function and pass a parameter called the dir which stands for the directory. After that, I used the try and except statements, when the function runs the try statement should open the directory passed as an argument, and if there is an error it should go to the except statement and run it.
So my issue starts at the except statement. In the except statement, I defined a variable to find the error and there is three condition to output the error that has been occurred.
But when I run this code, I get an error like: FileNotFoundError: [Errno 2] No such file or directory: '/etc/passwd', 'w' I was wondering if someone could help me solve the error so my code run perfectly.
英文:
In the Python code below, I created a function and pass a parameter called the dir which stands for the directory. After that, I used the try and except statements, when the function runs the try statement should open the directory passed as an argument, and if there is an error it should go to the except statement and run it.
So my issue starts at the except statement. In the except statement, I defined a variable to find the error and there is three condition to output the error that has been occurred.
But when I run this code, I get an error like: FileNotFoundError: [Errno 2] No such file or directory: "'/etc/passwd', 'w'" I was wondering if someone could help me solve the error so my code run perfectly.
def open_dir(dir): #Open directory
try: #Try if the directory has no errors.
return open(dir)
except: #except return the error occurred.
directory = open(dir)
if directory == FileNotFoundError:
return "[Errno 2] No such file or directory: 'directory'"
elif directory == PermissionError:
return "[Errno 13] Permission denied: '/et3]c/passwd'"
elif directory == IsADirectoryError:
return "[E'/home'rrno 21] Is a directory: '/home'"
print(open_dir("doc.docx"))
print(open_dir("'/etc/passwd', 'w'"))
print(open_dir('/home'))
答案1
得分: 1
Here is the translated code:
def open_dir(dir): # 打开目录
try: # 尝试打开目录,检查是否出现错误。
return open(dir)
except FileNotFoundError: # 如果出现 FileNotFoundError 错误,则返回错误信息。
return "[Errno 2] 文件或目录不存在: 'directory'"
except PermissionError:
return "[Errno 13] 权限被拒绝: '/et3]c/passwd'"
except IsADirectoryError:
return "[Errno 21] 这是一个目录: '/home'"
The explanation has been omitted as requested.
英文:
def open_dir(dir): #Open directory
try: #Try if the directory has no errors.
return open(dir)
except FileNotFoundError: #except return the error occurred.
return "[Errno 2] No such file or directory: 'directory'"
except PermissionError:
return "[Errno 13] Permission denied: '/et3]c/passwd'"
except IsADirectoryError:
return "[E'/home'rrno 21] Is a directory: '/home'"
This should work as you desire
The problem you have is that when you do open(dir)
and it doesn't work, you go in the except fragment of your code
but in the except fragment of your code, you do open(dir)
, which re-throws an exception since it's the reason you are in the except statement.
When you do a try except, if somethings goes wrong in the "try
", it raises an exception that you can catch in the "except
" fragment, and this is where you compare the exception (with for instance except FileNotFoundError
which checks if the exception is a FileNotFoundError
)
答案2
得分: 0
以下是翻译好的部分:
except
块应该捕获特定的异常,而不是捕获所有异常。- 另一件事是,不要检查变量
directory
是否等于异常对象,而应该检查它是否是该特定异常的实例。这是因为当你使用except
语句捕获异常时,异常对象被分配给一个变量,因此要检查变量是否是异常类的实例。 - 尝试这个:
def open_dir(dir):
try:
return open(dir)
except FileNotFoundError as e:
return f"[Errno 2] No such file or directory: '{e.filename}'"
except PermissionError as e:
return f"[Errno 13] Permission denied: '{e.filename}'"
except IsADirectoryError as e:
return f"[Errno 21] Is a directory: '{e.filename}'"
请注意,代码部分没有进行翻译。
英文:
The except
block should catch specific exception instead of catching all exceptions. and Another thing is; instead of checking if the variable directory
is equal to the exception object, you should check if it is an instance of that particular exception. This is because When you catch an exception using an except
statement, the exception object is assigned to a variable so check if variable is an instance of the exception class.
Try this one:
def open_dir(dir):
try:
return open(dir)
except FileNotFoundError as e:
return f"[Errno 2] No such file or directory: '{e.filename}'"
except PermissionError as e:
return f"[Errno 13] Permission denied: '{e.filename}'"
except IsADirectoryError as e:
return f"[Errno 21] Is a directory: '{e.filename}'"
答案3
得分: 0
尝试这段代码。
def open_dir(dir, mode="r"): # 打开目录
try: # 尝试检查目录是否没有错误。
return open(dir, mode=mode)
except Exception as e:
if e is FileNotFoundError:
return "[Errno 2] No such file or directory: 'directory'"
elif e is PermissionError:
return "[Errno 13] Permission denied: '/etc/passwd'"
elif e is IsADirectoryError:
return "[Errno 21] Is a directory: '/home'"
print(open_dir("doc.docx"))
print(open_dir("'/etc/passwd', 'w'"))
print(open_dir('/home'))
请注意,我已经将代码中的HTML转义字符(例如")替换为普通字符。
英文:
try this code.
def open_dir(dir, mode="r"): # Open directory
try: # Try if the directory has no errors.
return open(dir, mode=mode)
except Exception as e:
if e is FileNotFoundError:
return "[Errno 2] No such file or directory: 'directory'"
elif e is PermissionError:
return "[Errno 13] Permission denied: '/et3]c/passwd'"
elif e is IsADirectoryError:
return "[E'/home'rrno 21] Is a directory: '/home'"
print(open_dir("doc.docx"))
print(open_dir("'/etc/passwd', 'w'"))
print(open_dir('/home'))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论