我正在使用SonarQube来提高编码质量,但我在这里遇到了一个我不知道最佳解决方案的错误。
我使用以下签名调用Spring的方法:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome("E:\\Python\\selenium\\webdriver\\chromedriver.exe")
driver.get("https://www.tatacliq.com/global-desi-navy-embroidered-kurta/p-mp000000000876745")
driver.set_page_load_timeout(45)
driver.maximize_window()
driver.implicitly_wait(2)
driver.get_screenshot_as_file("E:\\Python\\Tatacliq.png")
print ("Executed Succesfull")
driver.find_element_by_xpath("//div[@class='pdp-promo-title pdp-title']").click()`enter code here`
SpecialPrice =driver.find_element_by_xpath("//div[@class='pdp-promo-title pdp-title']").text
print(SpecialPrice)
由于我只需要调用此方法并且我无意处理任何错误,因此我将此方法定义为:
T read() throws Exception, UnexpectedInputException, ParseException,
NonTransientResourceException;
但是我得到了这个声纳的错误:
ItemTransacaoEnvioVO read() throws
UnexpectedInputException, ParseException, NonTransientResourceException,
Exception
然后我像Sonar想要的那样改变了:
Remove the declaration of thrown exception
'org.springframework.batch.item.ParseException' which is a subclass of
'java.lang.Exception'
...
etc
我明白了:
ItemTransacaoEnvioVO read() throws Exception
考虑最佳实践和编码质量,这个问题的最佳解决方案是什么?
Java 8,Sonar
答案 0 :(得分:1)
如果您打算处理Exception
,UnexpectedInputException
,ParseException
,NonTransientResourceException
,
或者如果您想让自定义类的用户处理这些异常,
然后问题是可以接受的,你可以在你的SonarQube中将其标记为误报或不会修复。
但是,您或您的自定义类的用户不太可能对分别处理所有这些低级别异常感兴趣。 如果是这样的话, 那么定义你的自定义异常是有意义的, 而是抛出那个。 捕获Spring的所有异常并将其保留在自定义异常中,以防有人可能希望查看原始原因。
答案 1 :(得分:0)
不要抛弃一般异常。你应该继承Exception然后抛出你的子类,这样异常的类型实际上提供了有关正在发生的事情的信息,允许函数的客户端捕获并适当地处理它。