簡體   English   中英

如何正確引發此異常?

[英]How can I raise this exception properly?

如何正確引發此異常?

import unittest

def second_digit_value4(n): return True if n % 10 == 4 else False

class DigitValue4(unittest.TestCase):
    def test_last_digit_value4(self):
        self.assertEqual(second_digit_value4(14), True)
        self.assertFalse(second_digit_value4(22), False)

        with self.assertRaises(ValueError):
            second_digit_value4(23)

if __name__ == '__main__':
    unittest.main()

由於該函數僅適用於 2 位數的正數,因此應檢查參數是否介於 10 和 99 之間。然后您應該使用該范圍之外的數字對其進行測試。

import unittest

def second_digit_value4(n): 
    if 10 <= n <= 99:
        return n % 10 == 4
    raise ValueError("number must be 2 digits")

class DigitValue4(unittest.TestCase):
    def test_last_digit_value4(self):
        self.assertEqual(second_digit_value4(14), True)
        self.assertFalse(second_digit_value4(22), False)

        with self.assertRaises(ValueError):
            second_digit_value4(123)

if __name__ == '__main__':
    unittest.main()

單元測試不需要拋出錯誤。 他們檢查事情是真是假,並根據結果,測試通過或失敗。

將您的測試修改為:

assertTrue(second_digit_value4(14), 'second_digit_value4 failed on 14')
assertFalse(second_digit_value4(22), 'second_digit_value4 failed on 22')

異常用於處理“意外”情況。 您可以將函數修改為:

def second_digit_value4(n): 
if not n.isnumeric():
    raise ValueError("value must be a number")
if 10 <= n <= 99:
    return n % 10 == 4
else:
    raise ValueError("value out of range")

然后檢查是否拋出異常:

def test1(self):
    with self.assertRaises(ValueError):
       second_digit_value4('This is NaN')

您可以為超出范圍的異常添加另一個測試。

它的作用是允許您的函數在不執行操作並返回結果的情況下返回,這在該輸入上是不可能的。

或者,您可以只返回 NaN 而不是拋出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM