- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为需要遵循特定格式的参数定义了自定义正则表达式类型。我使用了另一篇文章 ( regex custom type ) 中的代码,它非常有用。我的问题是我正在编写单元测试,我希望正则表达式失败并尝试断言 argparse.ArgumentError
被引发( assertRaises(argparse.ArgumentError, parser.parse_args(inargs .split()))
)。问题是 argparse 似乎正在捕捉 ArgumentError 并抛出一个一般错误,阻止我验证失败的原因。我错过了什么吗?
这是回溯:
Error
Traceback (most recent call last):
File "/Users/markebbert/PyCharmProjects/newproject/unittests.py", line 203, in test_set_operation_parameter
self.assertRaises(argparse.ArgumentError, parser.parse_args(inargs.split()))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/argparse.py", line 1688, in parse_args
args, argv = self.parse_known_args(args, namespace)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/argparse.py", line 1727, in parse_known_args
self.error(str(err))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/argparse.py", line 2347, in error
self.exit(2, _('%s: error: %s\n') % (self.prog, message))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/argparse.py", line 2335, in exit
_sys.exit(status)
SystemExit: 2
这是我定义的自定义类型和解析器代码:
class RegexValidator(object):
"""
Performs regular expression match on value.
If match fails an ArgumentError is raised
"""
def __init__(self, pattern, statement=None):
self.pattern = re.compile(pattern)
self.statement = statement
if not self.statement:
self.statement = "must match pattern %s" % self.pattern
def __call__(self, string):
match = self.pattern.search(string)
if not match:
raise argparse.ArgumentError(None, self.statement)
return string
operatorRV = RegexValidator(
"^((\w+)=)?[iIuUcC]\[(\w+(\[\w+(,\w+)*\])?)(:\w+(\[\w+(,\w+)*\])?)*\]$",
"Set operations must conform to...")
parser = argparse.ArgumentParser(
description='Compare variants across individuals',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
group.add_argument('-s', '--set-operation', dest='operation', nargs='+',
type=operatorRV,
help="blah.")
这是单元测试:
# Fail for ending colon
inargs = "-s out=i[one[id1]:]"
self.assertRaises(argparse.ArgumentError, parser.parse_args(inargs.split()))
最佳答案
Argparse 是一个命令行解析器,错误总是以调用 argparse.exit()
结束,后者又调用带有错误代码的 sys.exit()
。这是设计使然。
对于单元测试,您必须对解析器的 .error()
或 .exit()
方法进行猴子修补(也许使用模拟)。 .error()
被调用并显示错误消息并打印用法消息,然后调用 .exit()
并返回退出代码和错误消息。
他们当前的实现:
# ===============
# Exiting methods
# ===============
def exit(self, status=0, message=None):
if message:
self._print_message(message, _sys.stderr)
_sys.exit(status)
def error(self, message):
"""error(message: string)
Prints a usage message incorporating the message to stderr and
exits.
If you override this in a subclass, it should not return -- it
should either exit or raise an exception.
"""
self.print_usage(_sys.stderr)
self.exit(2, _('%s: error: %s\n') % (self.prog, message))
关于Python:引发 argparse.ArgumentError 后,argparse 引发一般错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15691762/
谁能帮我解决这个问题: ruby 2.7.3p183 情况是这样的,这个方法: def send_request(url, payload = {}, internal_proxy: true) ..
我在 Spyder 的 IPython 控制台中为 Anaconda 导航器使用 kivy 包。打开 Spyder 后,如果我使用 runfile(path, wdir=cwd),我的代码将毫无问题地
这是我的 ruby 代码: books = ["Charlie and the Chocolate Factory", "War and Peace", "Utopia", "A Brief Hist
Ruby 提示我没有为我的脚本提供足够的参数,即: #!/usr/bin/ruby require 'mail' def send(file,recipients_csv) reci
当我运行以下命令时,救援似乎因 ArgumentError 而被忽略。来自 Ruby 的 ArgumentError 错误消息出现在控制台上,但我的 puts 消息没有。我尝试使用 TypeError
我编写了一个基本的 Rails 3 应用程序,它在特定的 URL 上显示一个表单和一个上传表单。昨天一切正常,但现在我遇到了几个需要修复的问题。我会尽量描述每个问题。我将它们组合在一起的原因是因为我觉
与其让我的 Ruby 对象的构造函数提示给定的参数数量(在参数错误的情况下),不如让消息准确地列出预期的内容。 def initialize a, b, c begin @a = a
我有一个只有命名参数的方法很奇怪的行为。 class MyConsumer < ... def method1(params) method2(params.slice(:a,:b))
我是 ruby 编程的新手。这是我在 Watir 的第一个程序。当我执行下面的代码时,我得到 HTTP 请求路径为空 (ArgumentError)。感谢您帮助修复此错误。我正在通过代理设置访问互
我正在研究应该用作 CLI 的 Ruby gem效用。 我决定使用 Thor ,它由 rails 命令使用并且似乎非常灵活(关于与 rake 的区别:link)。 问题是我找不到如何处理输入错误。例如
当我调用 Exception#backtrace_locations 时,它通常会按预期返回一个数组: begin raise "foo" rescue => e p e.backtrace_
如果你想添加一个 argparse 没有提供的额外检查,例如: if variable a == b then c should be not None ...是否允许自己引发 ArgumentErr
我使用的是 ruby 2.1.5p273、Rails 4.2.3,但最近从更旧的版本进行了升级。 我在 Phone 模型的这一行收到“ArgumentError:参数数量错误(1 表示 0)”错误
dates = ["11/12/08 10:47", "11/12/08 13:23", "11/12/08 13:30", "11/25/08 19:21", "2/2/09 11
我在让这个简单的测试通过 RSpec 2.8 时遇到了问题。 我想编写一个简单的测试来检测需要参数的方法是否缺少参数(即 ArgumentError:参数数量错误('x' 代表 'y'))。 我的测试
创建了一个线程 here ,但这并不能解决我的问题。 我的代码是: course.rb class Course # returns a value to be able to use +inc
defmodule My do def go do x = nil if(not x) do IO.puts "hello" else IO.put
所以我刚刚升级到 FontAwesome 4.0。此更改的一部分是引用图标的方式。 你不能再做: . 现在...您必须替换 icon与 fa- , 所以上面现在看起来像这样: 所以我灵机一动,决定替
我是 RoR 的新手,虽然我在 StackOverflow 和 Google 上进行了大量搜索,但我似乎无法解决这个问题。 在我的 Controller 中,我有以下代码来初始化@coupon_cat
我有一个简单的模型 class Task :deadline_in_future? def deadline_in_future? Date.today Task.new Argume
我是一名优秀的程序员,十分优秀!