异常处理,只接受特定的文件输入
Exception handling, only accept specific file inputs
这比我的工资等级高一点,所以我想我会在这里问一下。
我的简单 Python 代码提示用户输入文件名。但是,它必须是特定类型的文件,否则我会抛出错误。在这种情况下,输入的文件必须是文本或 CSV 文件,即文件扩展名必须是 .txt
或 .csv
filename = raw_input("Please enter .txt or .csv file: ")
我不知道如何测试它。你从类似
的内容开始
def fileName():
while True:
try:
filename = raw_input("Please enter .txt or .csv file: ")
然后使用 if 语句检查最后四个字符是 .txt
还是 .csv
。
执行此操作的标准方法是什么?
如果您想一直询问,直到用户使用 str.endswith 输入具有正确扩展名的文件名:
def fileName():
while True:
filename = raw_input("Please enter .txt or .csv file: ")
if filename.endswith((".csv",".txt"))
return filename
else:
print("Extension must be .csv or .txt")
如果您真的只想验证输入并在输入错误时引发错误:
def fileName():
filename = raw_input("Please enter .txt or .csv file: ")
if filename.endswith((".csv",".txt")):
return filename
raise ValueError("Extension must be .csv or .txt")
您不需要 try/except 来检查最后四个字符是 .txt
还是 .csv
但仅仅因为文件名可能以正确的扩展名结尾并不意味着它是有效文件或在打开时不会导致错误,您应该担心在实际打开文件时捕获异常。
Python 拥有用于执行各种路径操作的大量资源。这是继续前进并熟悉它们的好时机。
请参阅 os.path 的文档,特别是 os.path.splitext(path)
returns 一对 (root, ext) 所以你可以测试 ext (extension) 值。
这比我的工资等级高一点,所以我想我会在这里问一下。
我的简单 Python 代码提示用户输入文件名。但是,它必须是特定类型的文件,否则我会抛出错误。在这种情况下,输入的文件必须是文本或 CSV 文件,即文件扩展名必须是 .txt
或 .csv
filename = raw_input("Please enter .txt or .csv file: ")
我不知道如何测试它。你从类似
的内容开始def fileName():
while True:
try:
filename = raw_input("Please enter .txt or .csv file: ")
然后使用 if 语句检查最后四个字符是 .txt
还是 .csv
。
执行此操作的标准方法是什么?
如果您想一直询问,直到用户使用 str.endswith 输入具有正确扩展名的文件名:
def fileName():
while True:
filename = raw_input("Please enter .txt or .csv file: ")
if filename.endswith((".csv",".txt"))
return filename
else:
print("Extension must be .csv or .txt")
如果您真的只想验证输入并在输入错误时引发错误:
def fileName():
filename = raw_input("Please enter .txt or .csv file: ")
if filename.endswith((".csv",".txt")):
return filename
raise ValueError("Extension must be .csv or .txt")
您不需要 try/except 来检查最后四个字符是 .txt
还是 .csv
但仅仅因为文件名可能以正确的扩展名结尾并不意味着它是有效文件或在打开时不会导致错误,您应该担心在实际打开文件时捕获异常。
Python 拥有用于执行各种路径操作的大量资源。这是继续前进并熟悉它们的好时机。
请参阅 os.path 的文档,特别是 os.path.splitext(path)
returns 一对 (root, ext) 所以你可以测试 ext (extension) 值。