这是相同的代码。我在catch块中遇到错误,因为我想知道什么可以返回
public static DateTime ToDate(this object val)
{
try
{
return Convert.ToDateTime(val);
}
catch
{
return ;
}
}
答案 0 :(得分:2)
您不应该使用异常处理来尝试转换为DateTime
。如果转化失败,请使用DateTime.TryParse
并返回Nullable<DateTime>
。
例如:
public static DateTime? ToDate(this object val, IFormatProvider formatProvider = null)
{
if(val == null) return null;
if(val is DateTime) return (DateTime) val;
if(val is DateTime?) return (DateTime?) val;
if(formatProvider == null) formatProvider = System.Globalization.DateTimeFormatInfo.CurrentInfo;
string dateStr = val.ToString();
DateTime dt;
if(DateTime.TryParse(dateStr, formatProvider, System.Globalization.DateTimeStyles.None, out dt))
return dt;
return null;
}
现在,您可以区分有效的DateTime
和无法解析的object dtObj = "2016-02-11";
DateTime? dtorNot = dtObj.ToDate(); // valid, dtorNot.Value contains the DateTime
dtObj = "foo";
dtorNot = dtObj.ToDate(); // invalid, dtorNot.HasValue == false
:
def get_two_nums():
...
...
op = ...
num1 = ...
num2 = ...
answer = ...
return op, num1, num2, answer
def question():
op, num1, num2, answer = get_two_nums()
response = int(input("What is {} {} {}? ".format(num1, op, num2)))
if response == answer:
# the rest of your logic here
答案 1 :(得分:1)
您可以使用类似DateTime.MaxValue(或MinValue)的sentinel value,也可以返回null(只要您将签名更改为 DateTime?(可为空的DateTime)< / p>
答案 2 :(得分:0)
在这种情况下返回应该是明显的值。
如果没有明显的价值,那么您在错误的地方进行异常处理。或者也许您应该捕获该异常并抛出不同的类型。