日期时间模块 - ValueError try/except 不起作用 python 3
Datetime module - ValueError try/except won't work python 3
我有一个编程家庭作业。一切都很顺利,直到我使用 Try/Except 遇到问题。如果我输入一个有效的日期时间,程序将接受它并继续,但如果我使用一个有效的日期时间格式,异常将不会做出反应。
这是我的代码:
import datetime
import csv
def get_stock_name(prompt,mode):
while True:
try:
return open(input(prompt) + ".csv")
except FileNotFoundError:
print("File not found. Please try again.")
except IOError:
print("There was an IOError opening the file. Please try again.")
def get_stock_date(prompt):
while True:
try:
return (input(prompt))
except TypeError:
print("Try again.")
except ValueError:
print("Try again.")
def get_stock_purchased(prompt):
while True:
try:
return (input(prompt))
except ValueError:
print("Try again.")
except TypeError:
print("try again.")
stock_name = get_stock_name("Enter the name of the file ==> ", "w")
stock_date = datetime.datetime.strptime(get_stock_date("Enter the stock purchase date ==> " , "%m/%d/%Y"))
stock_sold = datetime.datetime.strptime(get_stock_date("Enter the date you sold the stock ==>" , "%m/%d/%Y"))
stock_purchased = get_stock_purchased("How many stocks were purchased on start date ==>")
你目前有一个循环会立即结束函数和 return 在我脑海中想到的任何情况下的一个字符串,例外情况(如刚才提到的)我不认为将会发生,使用错误数量的参数调用 strptime
,并使用错误数量的参数递归调用您的函数。而且您永远不会保存或 return 有意义的值。也许递归调用只是缩进错误?无论如何,你必须完全重构你的代码,因为其中大部分都没有什么意义:
import datetime
def get_stock_date(prompt):
while True:
d = input(prompt)
try:
d = datetime.datetime.strptime(d, "%m/%d/%Y")
except (ValueError, TypeError):
print("Try again.")
else:
return d
stock_date = get_stock_date("Enter the stock purchase date ==> ")
我想这就是你要找的:
def get_stock_date(prompt):
try:
stock_date = datetime.datetime.strptime(prompt, "%m/%d/%Y")
return(stock_date)
except:
print("Try Again.")
prompt = input("Enter the stock purchase date ==> ")
get_stock_date(prompt)
get_stock_date(input("Enter the stock purchase date ==> " ))
为了澄清 Tigerhawk 的初始评论:为了让 try-catch 处理 TypeError 或 ValueError,您需要在 try 语句中将输入转换为 datetime。
import datetime
def get_stock_date(prompt):
while True:
try:
return datetime.datetime.strptime(input(prompt), "%m/%d/%Y")
except (ValueError, TypeError):
print("Try again.")
stock_date = get_stock_date("Enter the stock purchase date ==> ")
此外,您的初始 post 有奇怪的缩进,使您看起来像是在对 get_stock_date 进行递归调用,这引起了混淆。
最后,如果您使用 Python,则需要使用 raw_input 2.
我有一个编程家庭作业。一切都很顺利,直到我使用 Try/Except 遇到问题。如果我输入一个有效的日期时间,程序将接受它并继续,但如果我使用一个有效的日期时间格式,异常将不会做出反应。
这是我的代码:
import datetime
import csv
def get_stock_name(prompt,mode):
while True:
try:
return open(input(prompt) + ".csv")
except FileNotFoundError:
print("File not found. Please try again.")
except IOError:
print("There was an IOError opening the file. Please try again.")
def get_stock_date(prompt):
while True:
try:
return (input(prompt))
except TypeError:
print("Try again.")
except ValueError:
print("Try again.")
def get_stock_purchased(prompt):
while True:
try:
return (input(prompt))
except ValueError:
print("Try again.")
except TypeError:
print("try again.")
stock_name = get_stock_name("Enter the name of the file ==> ", "w")
stock_date = datetime.datetime.strptime(get_stock_date("Enter the stock purchase date ==> " , "%m/%d/%Y"))
stock_sold = datetime.datetime.strptime(get_stock_date("Enter the date you sold the stock ==>" , "%m/%d/%Y"))
stock_purchased = get_stock_purchased("How many stocks were purchased on start date ==>")
你目前有一个循环会立即结束函数和 return 在我脑海中想到的任何情况下的一个字符串,例外情况(如刚才提到的)我不认为将会发生,使用错误数量的参数调用 strptime
,并使用错误数量的参数递归调用您的函数。而且您永远不会保存或 return 有意义的值。也许递归调用只是缩进错误?无论如何,你必须完全重构你的代码,因为其中大部分都没有什么意义:
import datetime
def get_stock_date(prompt):
while True:
d = input(prompt)
try:
d = datetime.datetime.strptime(d, "%m/%d/%Y")
except (ValueError, TypeError):
print("Try again.")
else:
return d
stock_date = get_stock_date("Enter the stock purchase date ==> ")
我想这就是你要找的:
def get_stock_date(prompt):
try:
stock_date = datetime.datetime.strptime(prompt, "%m/%d/%Y")
return(stock_date)
except:
print("Try Again.")
prompt = input("Enter the stock purchase date ==> ")
get_stock_date(prompt)
get_stock_date(input("Enter the stock purchase date ==> " ))
为了澄清 Tigerhawk 的初始评论:为了让 try-catch 处理 TypeError 或 ValueError,您需要在 try 语句中将输入转换为 datetime。
import datetime
def get_stock_date(prompt):
while True:
try:
return datetime.datetime.strptime(input(prompt), "%m/%d/%Y")
except (ValueError, TypeError):
print("Try again.")
stock_date = get_stock_date("Enter the stock purchase date ==> ")
此外,您的初始 post 有奇怪的缩进,使您看起来像是在对 get_stock_date 进行递归调用,这引起了混淆。
最后,如果您使用 Python,则需要使用 raw_input 2.