【发布时间】:2020-02-28 07:27:32
【问题描述】:
我是 Python 新手。我有一个util.py 文件来检查日期时间的值。我为它写了一个测试用例,值为无。但我收到错误strptime() argument 1 must be str, not None。有人能告诉我如何解决吗?谢谢。
我的util.py:
from datetime import date, datetime
import traceback
import time
from analyzer.analyzerlogging import setup_stopwatch, setup_logger
def validate_date(logger, val, parameter_name, date_format, date_format_info):
""" Check if val is the date with correct format, then return the date
"""
_val = None
try:
_val = datetime.strptime(val, date_format)
except ValueError:
msg = f"Invalid value {val} of parameter {parameter_name}. {parameter_name.capitalize()} should be at format '{date_format_info}'"
logger.error(msg)
raise Exception(msg)
return _val
我的测试用例:
import unittest
from analyzer.util import validate_date
from datetime import date
import datetime
from analyzer.analyzerlogging import setup_logger
class TestUtilValidateDate(unittest.TestCase):
#val is None and date_format_info is YYYY/MM/DD HH:mm:ss
def test_UT_UTIL_VALIDATE_DATE_005(self):
try:
validate_date(self.logger, None, 'param_name', '%Y/%m/%d %H:%M:%S', 'YYYY/MM/DD HH:mm:ss')
except Exception as e:
result = "Invalid value None of parameter param_name. Param_name should be at format 'YYYY/MM/DD HH:mm:ss'"
self.assertEqual(str(e),result)
错误:
test_UT_UTIL_VALIDATE_DATE_005 (test_util_validate_date.TestUtilValidateDate) ... FAIL
NoneType: None
======================================================================
FAIL: test_UT_UTIL_VALIDATE_DATE_005 (test_util_validate_date.TestUtilValidateDate)
----------------------------------------------------------------------
Traceback (most recent call last):
File "c:\Users\duongnb\Documents\SVN\trunk\src\Analyzer\toshiba\yieldnews\ut\test_util_validate_date.py", line 44, in test_UT_UTIL_VALIDATE_DATE_005
validate_date(self.logger, None, 'param_name', '%Y/%m/%d %H:%M:%S', 'YYYY/MM/DD HH:mm:ss')
TypeError: strptime() argument 1 must be str, not None
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\Users\duongnb\Documents\SVN\trunk\src\Analyzer\toshiba\yieldnews\ut\test_util_validate_date.py", line 47, in test_UT_UTIL_VALIDATE_DATE_005
self.assertEqual(str(e),result)
AssertionError: 'strptime() argument 1 must be str, not None' != "Invalid value None of parameter param_na[52 chars]:ss'"
- strptime() argument 1 must be str, not None
+ Invalid value None of parameter param_name. Param_name should be at format 'YYYY/MM/DD HH:mm:ss'
----------------------------------------------------------------------
Ran 1 test in 0.002s
FAILED (failures=1)
【问题讨论】:
-
尝试将 ValueError 替换为 TypeError 或在 util.py 中添加另一个异常 TypeError
-
另外,使用
with self.assertRaises(TypeError, msg='...'):而不是在测试中添加您自己的异常处理程序。并始终检查特定异常。
标签: python datetime python-unittest